【发布时间】:2013-09-12 15:23:14
【问题描述】:
在 Windows (MinGW) 中,我的程序从调用进程继承了不需要的句柄。
该进程不需要打开这些文件,但因为它存在于父级生命周期之外,所以我遇到了文件保持打开状态的常见问题。
在 Linux 上我解决了这样的问题:
// Close all file descriptors
// It's hard to figure out how many are open, but the first 1000 should do
int fd;
for (fd = 0; fd < 1000; fd++)
close (fd);
这在 Windows 中似乎不起作用。
如何确定哪些文件句柄已被继承?我怎样才能关闭它们?
该项目是使用 MinGW 和 Windows 的 Unix 兼容性 API 用 C(非 C++)编写的。
【问题讨论】:
-
这似乎在 Windows 中不起作用是什么意思?
-
我的意思是,它运行没有错误,但文件仍然打开。
-
@alk,像这样盲目地关闭窗口句柄可不是什么好事。
-
如果您可以控制父进程,则让它为
CreateProcess的bInheritHandles标志传递 FALSE。