c - 如何丢弃子进程的标准输出但保留父进程的标准输出?

标签 c linux io-redirection

我正在 Linux 中编写一个 C 程序并使用 fork 创建一个子进程。当我使用 ./test 1 > out.txt 运行我的程序时,父进程和子进程都将信息发送到 stdout

我希望文件 out.txt 只包含父进程的输出并丢弃子进程的所有输出。

我该怎么做?

最佳答案

我会将父级的 stdout 重定向到文件,然后当您 fork 时,重新打开子级的 stdout 句柄以转到其他内容(例如/dev/null,如果您只想放弃它,或者您可以打开终端如果您希望它返回到标准输出,请再次输入)。

dup2 系统调用可以做到这一点。 打开一个新的,关闭旧的,然后dup2新的文件描述符到旧的数字(1代表stdout)。

顺便说一句,这是 shell 本身用来重定向到文件的过程。

关于c - 如何丢弃子进程的标准输出但保留父进程的标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32751594/

相关文章:

c++ - 如何从安装的文件夹中读取文件c/c++

c - 网络 C 代码中的数据损坏

linux - 无法在容器内安装已安装的 block 设备 : "is not a block device"

c - 具有动态字符的结构**,在添加第 5 个条目后将第一个字符 * 显示为空白

c - 一个比简单的 strcspn() 更好的实现

linux - 在 postgres 中创建一个更新 FIFO 的触发器

不应该循环的代码(带 fork )正在循环

Java 重定向 System.out 并追加

linux - 管道重定向到 shell 文件的限制?

bash - 在 bash 中静音 docker rm 命令