Windows上/dev/null的等价程序是什么?


当前回答

根据GCC邮件列表上的这条消息,你可以使用文件“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;
}

(这段代码归功于丹尼;复制粘贴自他的信息。)

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

其他回答

在Windows PowerShell中,你必须使用start和$NUL:

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

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

start命令将启动一个分离的进程,效果与&类似。如果您正在运行的程序是控制台应用程序,则/B选项防止启动打开新的终端窗口。NUL在Windows中相当于/dev/null最后的2>&1将stderr重定向到stdout, stdout将全部指向NUL。

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

例如:

type c:\autoexec.bat > NUL

不创建文件。

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

在PowerShell中,你需要$null:

echo 1 > $null

乔恩·斯基特说得对。这里是Windows嵌入式文档中的null设备驱动程序页面(我不知道为什么它不在其他地方…)

这是另一个:

注册表中的空设备 特殊文件名 关于文件命名的更多信息

根据GCC邮件列表上的这条消息,你可以使用文件“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;
}

(这段代码归功于丹尼;复制粘贴自他的信息。)

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

在Windows10中,如果你想像使用文件一样使用NUL。

robocopy .\test NUL /move /minage:30 
# delete all files older than 30 days using robocopy

这些答案都不成立。

你会得到错误:

ERROR 123 (0x0000007B) Accessing Destination Directory \\.\NUL\
The filename, directory name, or volume label syntax is incorrect.

然而,如果你在cmd.exe中这样做,它就可以工作:

echo 1 > NUL

因此,NUL的行为与/dev/null文件不完全相同。

然而,对于robocopy命令,你可以这样做:

robocopy .\test NUL\null /move /minage:30 

那么它就有用了!

在Powershell中,$null只能作为标准输出重定向

echo 1 > $null

但是你不能在像robocopy这样的命令中使用$null来代替文件。 $null\null也不能工作。

所以我所能找到的与PowerShell中的cmd.exe有相同的效果,就是从PowerShell中调用cmd.exe,就像这样:

mkdir test1
cd test1
echo "" > test1.txt
echo "" > test2.txt
echo "" > test3.txt

$path = '.\test1'
cmd.exe /c "robocopy $path NUL\null /move"

# also this works:
cmd.exe /c "robocopy $path .\NUL\null /move"

因此,NUL的行为并不完全像/dev/null文件夹,而是像一个文件夹,当用作目标文件时,其中可以有幻影文件,除非您使用>重定向,然后它的行为就像一个空设备/文件。

另外值得一提的是,cmd.exe在第一次使用时创建了一个NUL。但是我们不能去看它。