我使用函数(L)通过execlp()
执行另一个程序(K)。
在K程序中,结果写入流1:
write(1, (char *)&o, sizeof(int));
由于在execlp()
之后,L的剩余部分不会被执行,我怎样才能将结果写在流1中?
不要问我为什么需要这样做。这是项目的要求。
我跟随你们的建议,但现在的问题是,K程序获取参数的方式来自流(一个标准流,另一个流),我使用管道将参数写入相应的流(由父母完成。
在子exec之后,在父部分中,我从流0读取(K程序将其结果写回流1中)。但我能得到的是父母写入流中的内容,而不是K程序写回的内容。 怎么了?我需要添加另一个管道吗?
谢谢!
答案 0 :(得分:3)
Jonathan Leffler在评论中提到的关键见解是,在致电fork
之前,您需要L
正在运行execlp()
的程序。
在fork之后,父级继续执行L
的其余部分,并且子级通过调用K
变为程序execlp()
,除非出现错误,否则永远不会返回
因此,“L的剩余部分将不会被执行”的断言是不正确的。如果正确编写函数L
,将在父进程中执行。
更新:由于OP提出了更具体的问题,我接着回答这个问题。
如果要检索子进程写入stdout
(fd 1)的内容,则需要在fork之前创建一个新管道,并将此管道的写入端复制到子项{{1}中}。
以下是一个示例程序,稍稍修改了pipe man page。
stdout