首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打开"nul“文件?

如何打开"nul“文件?
EN

Stack Overflow用户
提问于 2009-01-13 06:04:26
回答 3查看 2.7K关注 0票数 5

我需要创建一个新的进程,将标准错误流重定向到某个文件。用于创建子进程的代码没有可用的控制台,因此在某些情况下,GetStdHandle(any)将返回0。由于某些原因(子进程的源代码不可用),子进程将尝试复制其所有标准IO句柄,因此它的所有句柄都应该是有效的。

因此,我需要以与从控制台运行进程相同的方式运行该进程:

代码语言:javascript
复制
someproc <nul >nul 2>err

我看到了一些方法: 1.创建两对管道。这可能是一个很好的解决方案,但对我来说太复杂了。2.用CreateFile( "nul“,...)打开”nul“文件函数调用。这个调用没有创建任何文件,但这看起来也很奇怪。3.使用INVALID_HANDLE_VALUE。这也是可行的,但我认为另一个子进程可能会有不同的问题。

我相信还有更好的方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-01-13 06:13:07

正如最初所说的,您已经回答了自己的问题。要打开"nul“文件,只需在调用CreateFile时指定"nul"即可。它看起来很奇怪,因为几乎没有人使用过这个文件名。(我没有看到它像我看到的/dev/null那样频繁使用。)不过,这是完全有效的。

但是,如果您发现Invalid_Handle_Value也可以工作,那么请继续使用它。这当然是最简单的。起初,我不会期望它能工作,因为我不希望它是可复制的。

票数 6
EN

Stack Overflow用户

发布于 2009-01-13 06:16:55

是的,"nul“就是按照你的想法去做。如果您迁移到unix,它将是"/dev/null“。这个时髦的名字是从DOS时代遗留下来的,还有"prn“和"com1”等等。

票数 2
EN

Stack Overflow用户

发布于 2009-01-13 09:02:53

INVALID_HANDLE_VALUE与DuplicateHandle一起使用是不合适的:文档中指出,您需要在句柄上拥有PROCESS_DUP_HANDLE访问权限。你没有那个righton INVALID_HANDLE_VALUE。不过,Device NUL (指向/device/null的符号链接)可以正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/438092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档