如何丢弃系统命令的输出?

How to discard the output from a system command?

我最近写了这段代码来用C语言执行系统命令。我只是想测量这个系统命令执行的时间。

但是,我不希望在执行该程序时显示输出结果。

#include <stdio.h>
int main(int argc, char* argv[])
{
    system("ls");
    return 0;
}

如何丢弃系统命令的输出?

如果想通过系统命令来计时,可以在系统调用中重定向standout和stderr。不确定这是最优雅的,但它有效:

#include <stdlib.h>
#include <stdio.h>
int main() {
    system("ls >/dev/null 2>&1");
}

请注意,system 需要 <stdlib.h> headers。

当您从 C 调用 system() 时,将调用 shell 来解释您的命令。这意味着您可以使用 shell 重定向:

system("ls > /dev/null");

如果您希望错误也被抑制

system("ls > /dev/null 2>&1");

但是,由于 运行 和 shell 的开销以及构建 shell 命令的脆弱性,最好尽可能避免 system()