【发布时间】:2019-04-04 10:46:33
【问题描述】:
在 Windows 中,使用CreateProcess 创建进程时,可以将true 作为bInheritHandles 参数传递。
CreateProcess( , , , , bInheritHandles, , , , )
这意味着所有标记为可继承的文件句柄实际上都将被子进程继承。
如何控制C++std::fstream类创建的底层文件句柄是否可继承?
【问题讨论】:
-
你不能。如果您打算继承,请使用 CreateFile()。
-
但是,至少如果使用 MSVC,有一种方法可以首先从 HANDLE 获取 FILE*,然后将 std::fstream 绑定到该 FILE*。
-
何必为这一切而烦恼。由于必须使用 API,因此只能使用 API,不要同时使用 API 和 std。
-
@MichaelChourdakis,
fstream对象更容易使用。通过使用运算符<<和>>,您可以自动解析和字符串化变量。 -
@Mercalli 与 API 相比,所有 std 对象的功能都受到限制,并且仅对基本处理级别有用。在全高度项目中,您需要更多功能,这意味着 API。此外,您仍然可以使用缓冲区级别的流函数,然后使用 API 将缓冲区写入文件。
标签: c++ winapi fstream child-process filehandle