c/c++,mfc:不将打开的文件/句柄传递给生成的进程

Posted

技术标签:

【中文标题】c/c++,mfc:不将打开的文件/句柄传递给生成的进程【英文标题】:c/c++, mfc: Not passing open files / handles to a spawned process 【发布时间】:2010-10-07 09:48:28 【问题描述】:

在 unix 中,我知道例程:在子进程中的 fork() 和 exec() 之间,我关闭除了 stdin/out/err 之外的所有内容,这样所有打开的端口或文件都不会传递给我要运行的程序。

但是如何在 Windows 中执行此操作?在我的情况下,我在 C/C++ 中实现一个 DLL,我需要关闭我打开的一些文件(间接通过一些对象)和加载 dll 的应用程序打开的套接字,这样这些打开的文件句柄就不会传递给我正在生成的应用程序。该应用程序不会将这些句柄传递给 DLL,因为我的代码不需要这些句柄...

到目前为止,代码只是调用了 _spawnl(_P_NOWAIT, "foo.exe", "foo.exe", "arg1", "arg2",NULL); Visual Studio 2008,如果这很重要。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

嗯 - 很抱歉在这里猜了一点,但你确定 Windows 中的 spawnl 会传递打开的文件句柄吗?

如果是这样,也许您想查看 CreateProcess 和 StartupInfo - 这些可以更好地控制传递/继承给新进程的内容

【讨论】:

使用 CreateProcess 而不是 spawnl() 成功了。谢谢!

以上是关于c/c++,mfc:不将打开的文件/句柄传递给生成的进程的主要内容,如果未能解决你的问题,请参考以下文章

MFC技巧

如何不将英文字母传递给Json

MFC - 打开执行文件

构造多部分 MIME 消息而不将其保存在内存中

关闭其它进程占用的文件句柄

Python 2.7:仅从文件句柄(而不是路径)获取文件的大小