代码之家  ›  专栏  ›  技术社区  ›  okutane

如何打开“nul”文件?

  •  5
  • okutane  · 技术社区  · 15 年前

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

    因此,我需要以相同的方式运行该进程,因为它可以通过以下方式从控制台运行:

    someproc <nul >nul 2>err
    

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

    我相信有更好的方法。

    3 回复  |  直到 11 年前
        1
  •  6
  •   Rob Kennedy dkackman    15 年前

    按照最初的措辞,您已经回答了自己的问题。要打开“nul”文件,只需指定 "nul" 当你打电话的时候 CreateFile . 这看起来很奇怪,因为几乎没有人使用过这个文件名。(我看它不像我看到的那样经常使用 /dev/null )不过这是完全正确的。

    但是如果你发现了 Invalid_Handle_Value

        2
  •  2
  •   Mark Harrison    15 年前

    是的,“nul”就是做你想做的事。如果移动到unix,它将是“/dev/null”。这个时髦的名字是DOS时代遗留下来的,还有“prn”和“com1”等。

        3
  •  1
  •   MSalters    15 年前

    使用 INVALID_HANDLE_VALUE 使用DuplicateHandle是不正确的:文档说明您需要 PROCESS_DUP_HANDLE 无效的\u句柄\u值 NUL (符号链接至 /device/null