gpt4 book ai didi

c - 隐藏 Execve 的终端输出

转载 作者:行者123 更新时间:2023-12-01 02:14:05 25 4
gpt4 key购买 nike

我正在制作一个 C 程序,它基本上从用户那里读取一行,解释它,然后尝试使用 execve 执行命令。如果“&”在输入中,我也会将 execve fork 到子进程。

现在我希望隐藏在子进程中运行时来自 execve 命令的任何终端输出。
有没有相对简单的方法来做到这一点?

最佳答案

您可以通过在 fork 之后但在 execve() 之前将 stdout 和 stderr 重定向到/dev/null 来隐藏输出.这个想法是打开/dev/null,然后用dup2() 复制获得的文件描述符的stdout 和stderr 副本。 (这也将首先关闭原件)。这几乎与重定向到管道相同。

一个例子(不完整的程序,跳过大多数错误检查):

  #include <unistd.h>
#include <fcntl.h>
...

int pid = fork();
if (pid == -1) {
/* fork error */
exit(1);
} else if (pid == 0) {
/* child process */

/* open /dev/null for writing */
int fd = open("/dev/null", O_WRONLY);

dup2(fd, 1); /* make stdout a copy of fd (> /dev/null) */
dup2(fd, 2); /* ...and same with stderr */
close(fd); /* close fd */

/* stdout and stderr now write to /dev/null */
/* ready to call exec */

execve(cmd, args, env);
exit(1);
} else {
/* parent process */

...

关于c - 隐藏 Execve 的终端输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26453624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com