在我的程序中,我使用fork和execvp来创建子进程。现在我想将childprocess的输出定向到stdout和当前目录中的文件。那怎么能实现呢?
答案 0 :(得分:2)
你不能将一个文件描述符绑定到两个东西 - 没有办法让write(x, "hello world")
写入std out和一个文件。相反,你必须有三个文件 - 孩子的标准输出fd,父母从中读取,父母的标准输出fd,父母的标准输出到文件。
这是你做的:
从管道读取并写入stdout并且输出文件的循环必须运行,直到子项关闭管道末尾,因此您可能需要创建一个线程来在后台执行此操作。
仅供参考,这就是世界上每个shell实现管道ala cat file | grep hello
答案 1 :(得分:0)
你应该读一下select()系统调用,它可以用来将i / p或o / p指向多个文件描述符吗'man select'