隐藏使用system()时使用的控制台命令? C ++ Linux

时间:2017-05-17 01:34:56

标签: c++ linux

好吧,我会说清楚简单:我是一个C ++的傻瓜。尽管如此仍在努力学习。

我的问题是:是否可以使用system()命令通过终端运行命令而不让命令显示在控制台/终端中?

示例:

system("sudo service sshd start") ;
Output: Sudo service sshd start

我想要的地方:

system("sudo service sshd start") ;
output: (Blank)

注意:我在linux上。

1 个答案:

答案 0 :(得分:2)

system标准库函数启动子shell并将该提供的字符串作为该子shell中的命令执行。 (注意,子shell只是一个运行shell解释器的进程; system调用的特定shell解释器将取决于你的系统。没有使用终端仿真器;至少,不是在Unix或类Unix系统上。)

system函数在启动子shell之前不会重新分配任何文件描述符,因此该命令将使用当前标准输入,输出和错误分配执行。许多命令将输出到stdout和/或stderr,system不会抑制这些输出。

如果您希望命令以静默方式执行,那么您可以在命令本身中重定向stdout和/或stderr:

system("sudo service sshd start >>/dev/null 2>>/dev/null") ;

当然,这将隐藏可能因命令失败而导致的任何错误消息,因此您应该检查system的返回值并提供您自己的错误消息(或记录信息),如果它不是0

这与system调用或您从自己的可执行文件中触发子shell这一事实几乎没有关系。如果直接输入shell,相同的命令将具有相同的行为。