在我的学校,我们必须用C语言编写这个作业:
PART2:写三个程序A, B, c。
A将使用fork()
和exec()
系统调用启动B和C。
当启动时,它将重定向B和C的输出和输入到管道
B将从其标准输入接收数字并对其进行递增到5时,将结果打印到其标准输出中。
C将从它的标准输入中接收一个数字并将其插入2,在其标准输出中打印结果。
A的作用是将这个计算用一个随机数播种到B,然后从B,检索结果寄给C,从C,结果寄给B,等等,直到这个重复了100次。
如果A在发送数据到另一个进程之间等待1秒,那就太好了。
A将在它自己的标准输出中打印所有来自其他进程,例如:
001. A -> B 10
B -> A 15
A -> C 15
C -> A 7
002. A -> B 7
B -> A 12...
我已经有文件B和C.然而,我不知道如何编程文件A控制一切。有人能帮我吗?
每个进程持有一个文件描述符表,当fork()时,子进程从父进程继承一个表的副本。如果你在进程a中有一个管道,那么当你分叉时,子进程也会在它的表中有管道的文件描述符。另一个要求是B和C将通过标准输入接收,也就是fd0。您可以使用dup2函数在标准输入的FD和管道的FD之间进行覆盖。这样,fd0现在将被定向到管道,当你分叉到进程B时,它的标准输入现在将来自管道。你可以做同样的标准输出FD(1)。我建议使用dup()保留原始标准I/O FD的副本,以便在完成分叉后为进程a恢复它们。