【发布时间】:2015-09-24 00:38:00
【问题描述】:
我正在Linux中编写一个C程序并使用fork创建一个子进程。当我使用./test 1 > out.txt 运行我的程序时,父进程和子进程都会向stdout 发送信息。
我希望文件out.txt 仅包含父进程的输出并丢弃子进程的所有输出。
我该怎么做?
【问题讨论】:
标签: c linux io-redirection
我正在Linux中编写一个C程序并使用fork创建一个子进程。当我使用./test 1 > out.txt 运行我的程序时,父进程和子进程都会向stdout 发送信息。
我希望文件out.txt 仅包含父进程的输出并丢弃子进程的所有输出。
我该怎么做?
【问题讨论】:
标签: c linux io-redirection
我会将父级的标准输出重定向到该文件,然后当您分叉时,重新打开子级的标准输出句柄以转到其他内容(例如 /dev/null 如果您只想放弃它,或者您可以打开终端如果您希望它返回到标准输出,请再次)。
dup2 系统调用可以做到这一点。 open 一个新的,close 旧的,然后dup2 新的文件描述符到旧的编号(1 表示标准输出)。
这是 shell 本身用来重定向到文件 btw 的过程。
【讨论】: