我正在Linux中编写C程序并使用fork
创建子进程。当我使用./test 1 > out.txt
运行我的程序时,父进程和子进程都会将信息发送到stdout
。
我希望文件out.txt
仅包含父进程的输出,并丢弃子进程的所有输出。
我该怎么做?
答案 0 :(得分:1)
我会将父节点的stdout重定向到文件,然后当你fork时,重新打开子节点的stdout句柄去别的东西(比如/ dev / null,如果你只是想抛弃它,或者你如果你想让它回到stdout,可以再次打开终端。
dup2
系统调用可以做到这一点。 open
一个新的,close
旧的,然后dup2
新的文件描述符为旧的数字(1为标准输出)。
这是shell本身用于重定向到文件btw的过程。