我需要创建一个将标准错误流重定向到某个文件的新进程。创建子进程的代码没有可用的控制台,因此在某些情况下 GetStdHandle(any) 将返回 0。子进程将出于某种原因尝试复制其所有标准 IO 句柄(子进程的源代码不可用) 所以它的所有句柄都应该是有效的。
所以我需要以与可以从控制台运行相同的方式运行该过程:
someproc <nul >nul 2>err
我看到了一些方法:
1. 创建两对管道。这可能是一个很好的解决方案,但对我来说太复杂了。
2. 使用 CreateFile("nul", ...) 函数调用打开“nul”文件。此调用未创建任何文件,但这对我来说也很奇怪。
3. 使用 INVALID_HANDLE_VALUE。这也有效,但我认为另一个子进程可能存在不同的问题。
我相信有更好的方法。
最佳答案
正如最初所说,您已经回答了自己的问题。要打开“nul”文件,您只需指定 "nul"
当您调用 CreateFile
.它只是看起来很奇怪,因为几乎没有人使用过该文件名。 (我认为它的使用频率不如我看到的 /dev/null
。)不过,它是完全有效的。
但是如果你发现 Invalid_Handle_Value
也可以,然后继续使用它。这当然是最简单的。最初,我没想到它会起作用,因为我不希望它是可复制的。
关于winapi - 如何打开 "nul"文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/438092/