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”文件。

其他回答

NUL也可以通过编程方式工作。例如:

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

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

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

例如:

type c:\autoexec.bat > NUL

不创建文件。

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

在PowerShell中,你需要$null:

echo 1 > $null

在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的内置工具是旧的副本。 但请确保,您使用开关/b(二进制),否则内容将不会被OS缓存(这是我的目标)。

将目录(递归)放入操作系统缓存:

for /f "delims=" %f in ('dir /s /b /a-d D:\Solr\data') do @copy /b "%f" nul > nul

使用RamMap(来自Sysinternals)进行验证。

根据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”文件。