ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

深入解读 WSL 自定义容器 C API 枚举 WslcDeleteContainerFlags

深入解读 WSL 自定义容器 C API 枚举 WslcDeleteContainerFlags 深入解读 WSL 自定义容器 C API 枚举 WslcDeleteContainerFlags【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL导读WslcDeleteContainerFlags是 WSL 自定义容器WSLCC API 中用于控制WslcDeleteContainer行为的关键枚举定义于 src/windows/WslcSDK/wslcsdk.h。它决定删除容器时是要求容器已停止WSLC_DELETE_CONTAINER_FLAG_NONE还是允许强制终止并删除运行中的容器WSLC_DELETE_CONTAINER_FLAG_FORCE。读完本文你将掌握该枚举的取值语义、底层标志转换机制、相关错误码以及如何在实际 C/C/C# 代码与测试用例中使用它。枚举定义与取值官方文档 wslcdeletecontainerflags.md 中给出了完整定义typedef enum WslcDeleteContainerFlags { WSLC_DELETE_CONTAINER_FLAG_NONE 0, WSLC_DELETE_CONTAINER_FLAG_FORCE 0x01 } WslcDeleteContainerFlags;枚举值值含义WSLC_DELETE_CONTAINER_FLAG_NONE0无附加标志删除已停止的容器WSLC_DELETE_CONTAINER_FLAG_FORCE0x01强制模式可删除运行中的容器从源码结构看该枚举采用位标志bit flag设计0x01是独立的低位比特位未来新增行为标志可以在高位继续扩展互不干扰。声明位置与配套 API在头文件 src/windows/WslcSDK/wslcsdk.h 中该枚举紧随WslcStopContainer声明之后typedef enum WslcDeleteContainerFlags { WSLC_DELETE_CONTAINER_FLAG_NONE 0, WSLC_DELETE_CONTAINER_FLAG_FORCE 0x01 } WslcDeleteContainerFlags; DEFINE_ENUM_FLAG_OPERATORS(WslcDeleteContainerFlags); STDAPI WslcDeleteContainer(_In_ WslcContainer container, _In_ WslcDeleteContainerFlags flags, _Outptr_opt_result_z_ PWSTR* errorMessage);头文件通过DEFINE_ENUM_FLAG_OPERATORS为该枚举启用|、等位运算操作符表明该枚举被设计为可组合的 flag 类型。WslcDeleteContainer函数的参数说明详见 wslcdeletecontainer.md参数类型方向containerWslcContainerinflagsWslcDeleteContainerFlagsinerrorMessagePWSTR*out, optional返回值为HRESULT。底层标志转换从公开枚举到内部 WSLCDeleteFlags在 src/windows/WslcSDK/wslcsdk.cpp 中WslcDeleteContainerFlags通过FlagsTraits模板与内部枚举WSLCDeleteFlags建立映射template struct FlagsTraitsWslcDeleteContainerFlags { using WslcType WSLCDeleteFlags; constexpr static WslcDeleteContainerFlags Mask WSLC_DELETE_CONTAINER_FLAG_FORCE; WSLC_FLAG_VALUE_ASSERT(WSLC_DELETE_CONTAINER_FLAG_FORCE, WSLCDeleteFlagsForce); };WSLCDeleteFlags定义于 src/windows/service/inc/WSLCShared.idlWSLCDeleteFlagsForce 1, WSLCDeleteFlagsDeleteVolumes 2, cpp_quote(#define WSLCDeleteFlagsValid (WSLCDeleteFlagsForce | WSLCDeleteFlagsDeleteVolumes))ConvertFlags会将公开标志与Mask按位与后转为内部值wslcsdk.cppWslcDeleteContainer最终调用internalType-container-Delete(ConvertFlags(flags))wslcsdk.cpp。删除流程中的标志处理在 src/windows/wslcsession/WSLCContainer.cpp 中内部删除逻辑对 flag 的处理揭示了两个关键行为运行中容器检查WSLCContainer.cppm_state WslcContainerStateRunning WI_IsFlagClear(Flags, WSLCDeleteFlagsForce)未设置 FORCE 时运行中的容器删除会被拒绝。底层删除调用WSLCContainer.cppm_runtime.Docker().DeleteContainer(m_id, WI_IsFlagSet(Flags, WSLCDeleteFlagsForce), WI_IsFlagSet(Flags, WSLCDeleteFlagsDeleteVolumes));FORCE 标志被透传到 Docker 删除调用决定是否强制停止容器。实战使用示例官方文档 wslcdeletecontainer.md 中的示例HRESULT hr WslcDeleteContainer( container, WSLC_DELETE_CONTAINER_FLAG_FORCE, NULL);C 与 C# 绑定同样暴露了对应选项// C见 doc/docs/api-reference/cpp/enumerations/deletecontaineroption.md container.Delete(DeleteContainerOption::None); container.Delete(DeleteContainerOption::Force);// C#见 doc/docs/api-reference/csharp/enumerations/deletecontaineroption.md container.Delete(DeleteContainerOption.None); container.Delete(DeleteContainerOption.Force);测试用例验证测试代码验证了两个核心行为无 FORCE 时删除运行中容器失败test/windows/WslcSdkTests.cpp// Deleting a running container without force flag should fail VERIFY_ARE_EQUAL(WslcDeleteContainer(container.get(), WSLC_DELETE_CONTAINER_FLAG_NONE, nullptr), WSLC_E_CONTAINER_IS_RUNNING);带 FORCE 时删除成功WslcSdkTests.cppVERIFY_SUCCEEDED(WslcDeleteContainer(container.get(), WSLC_DELETE_CONTAINER_FLAG_FORCE, nullptr));WinRT 层也有等价测试WslcSdkWinRTTests.cpp验证container.Delete(DeleteContainerOption::None)在运行中抛WSLC_E_CONTAINER_IS_RUNNING。相关 API 一览枚举索引enumerations/index.mdC 删除 APIwslcdeletecontainer.mdC 端到端示例end-to-end-example.md容器状态枚举WslcContainerState含WSLC_CONTAINER_STATE_RUNNING、WSLC_CONTAINER_STATE_DELETEDwslcsdk.h【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表