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

标签 c++ linux

好吧,我会简单明了:我是 C++ 普通人。仍在努力学习。

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

示例:

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

我想要的地方:

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

注意:我在 linux 上。

最佳答案

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,相同的命令将具有相同的行为。

关于c++ - 隐藏使用 system() 时使用的控制台命令? C++ Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44014091/

相关文章:

c++ - 缺少 Commctl.h

c++ - addr2line 中的 "discriminator"是什么?

c++ - 如何使 C++ 继承保留访问说明符

c++ - 检测是否正在执行 catch block

python - 两次启动对话时出现空白窗口?

c++ - 为什么我的 operator== 不匹配

linux - 查看哪个是eth0和eth1(服务器,客户端)

linux - 仅当 B、C、D、E 和 G 中的任何一个包含 Failed using Linux shell 时才打印列 A

linux - 如何在没有 lhal 和 dmidecode 命令的情况下获取 Linux 序列号?

c++ - Linux下使用c++进行串口通信