【问题标题】:Is there a /dev/null on Windows?Windows 上有 /dev/null 吗?
【发布时间】:2010-09-23 17:01:14
【问题描述】:

在 Windows 上 /dev/null 的等价物是什么?

【问题讨论】:

    标签: windows


    【解决方案1】:

    我认为您需要NUL,至少在命令提示符或批处理文件中。

    例如:

    type c:\autoexec.bat > NUL
    

    不创建文件。

    (我相信如果您尝试以编程方式创建文件也是如此,但我没有尝试过。)

    在 PowerShell 中,您需要 $null:

    echo 1 > $null
    

    【讨论】:

    • @capthive:/dev/null.txt 和 /dev/null/foo.txt 之间是有区别的。
    • 我刚刚又看了一遍,我收回了我原来的说法。我正在编写代码,错误被吞没了。我把它删了,所以没有人不小心把它当成事实。
    • 对于在 Windows 下寻找 Unix“特殊”文件的人:here 是用于 Win32 的 /dev/random/dev/zero 设备驱动程序。
    • @CoDEmanX:这不是我的经验。写入控制台 - 甚至是文件 - 可能会花费大量时间。我刚刚用一个将“Hello there”写入标准输出10000000次的程序对其进行了测试。重定向到文件(在 SSD 上)需要 18 秒。重定向到 NUL 需要 4 秒。完全没有重定向让我在一段时间后因缺乏耐心而放弃......
    • 我在 Win95 时代了解到,你应该在特殊设备名称后写一个冒号,所以NUL:(和CON:PRN:,...),它主要是一个风格问题并清楚地表明NUL: 是一个特殊对象,而不是一个名为NUL 的文件。此外,可以使用特殊的 API 创建一个名为 NUL 的文件(请参阅其中一个答案)。我梦想也许有一天,如果每个人都按照惯例使用冒号,我们将能够弃用可怕的特殊设备名称:-)
    【解决方案2】:

    根据这个message on the GCC mailing list,你可以使用文件“nul”代替/dev/null:

    #include <stdio.h>
    
    int main ()
    {
        FILE* outfile = fopen ("/dev/null", "w");
        if (outfile == NULL)
        {
            fputs ("could not open '/dev/null'", stderr);
        }
        outfile = fopen ("nul", "w");
        if (outfile == NULL)
        {
            fputs ("could not open 'nul'", stderr);
        }
    
        return 0;
    }
    

    (此代码归功于Danny;从他的消息中复制粘贴。)

    你也可以通过重定向使用这个特殊的“nul”文件。

    【讨论】:

    • 啊,这就解释了为什么,如果你在 Windows 中创建一个C:\dev 目录,并且你使用了很多 GNU 实用程序,你最终会在该目录中获得一个名为 null 的神秘文件。
    【解决方案3】:

    NUL 在 Windows 中似乎实际上是任何文件夹中的虚拟路径。就像任何文件系统中的...

    使用任何带有 NUL 的文件夹都可以。

    例子,

    echo 1 > nul
    echo 1 > c:\nul
    echo 1 > c:\users\nul
    echo 1 > c:\windows\nul
    

    在 Linux 上与/dev/null 具有相同的效果。

    这是在 Windows 7 64 位上测试的。

    【讨论】:

    【解决方案4】:

    Jon Skeet 是正确的。这是 Windows Embedded 文档中的 Nul Device Driver 页面(我不知道为什么它不在其他地方......)。

    这是另一个:

    【讨论】:

    • 当然 Jon Skeet 是正确的。感谢您陈述一个显而易见且普遍的事实:)
    • 此处的 2 个链接现已损坏。 :(
    【解决方案5】:

    NUL 也以编程方式工作。例如。以下:

    freopen("NUL", "w", stderr);
    

    无需创建文件即可按预期工作。 (MSVC++ 12.0)

    【讨论】:

    • 这个问题需要NUL回答的次数就这么多了,5年前就已经过了。
    • 我认为这个答案为讨论增加了有效的贡献。
    【解决方案6】:

    如果您需要在 Microsoft Windows 中执行与 Linux 中 /dev/null 的符号链接等效的操作,您可以打开管理员的 cmd 并输入:

    对于文件:

    mklink c:\path\to\file.ext NUL:
    

    或者,对于目录:

    mklink /D c:\path\to\dir NUL:
    

    这将使文件/目录始终保持在 0 字节,并且每次写入尝试仍然返回成功。

    【讨论】:

      【解决方案7】:

      您必须在 Windows PowerShell 中为此使用 start$NUL >:

      输入此命令,假设 mySum 是您的应用程序的名称,5 10 是您发送的命令行参数。

      start .\mySum  5 10 > $NUL 2>&1
      

      start 命令将启动一个分离的进程,效果类似于&amp;。如果您正在运行的程序是控制台应用程序,/B 选项可防止启动打开新的终端窗口。 NUL 相当于 Windows 的 /dev/null。末尾的2&gt;&amp;1 会将stderr 重定向到stdout,这将全部转到NUL

      【讨论】:

        猜你喜欢
        • 2015-12-26
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-24
        • 1970-01-01
        相关资源
        最近更新 更多