winapi - 如何打开 "nul"文件?

标签 winapi

我需要创建一个将标准错误流重定向到某个文件的新进程。创建子进程的代码没有可用的控制台,因此在某些情况下 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/

相关文章:

python - 使用win32 python将excel中的一列数据格式化为百分比

windows - 是否存在 ReadProcessMemory 失败的情况?

C++ 'CA2W' : identifier not found

c++ - 如何使用 C++ Win32 API 计算两个日期之间的天数?

c++ - 如何防止 WSASend() 阻塞我的 UI 线程?

c++ - Windows API 中的 InvalidateRect,Charles Petzold checker4.c 程序

c++ - 水平鼠标滚轮事件? (WinAPI)

CreateFile 打开 lsass.exe 失败

c++ - 如何正确获取窗口标题

c++ - 验证 native 的 Active Directory 域信任关系