0

我正在尝试制作一个执行以下操作的程序:

./run cmd1 arg1 : cmd2 arg2 : cmd3 arg3

允许我并行运行三个命令,例如使用fork()execvp连接 cmd 1 的输出到 cmd 2 的输入,socketpair仅使用。

我的问题是:

我是否需要为我使用的每个命令创建多个套接字对,或者我可以使用相同的套接字对,我只是一次又一次地使用它?

谢谢

4

1 回答 1

1

您应该为需要使用的每个父子通信链接创建一个单独的套接字对。

例如,您的程序可能具有如下结构:

Process #1 creates socketpair(A,B)
Process #1 calls fork(), creating Process #2
Process #1 uses socket A to communicate with Process #2
Process #2 uses socket B to communicate with Process #1
Process #2 creates socketpair(C,D)
Process #2 calls fork(), creating Process #3
Process #2 uses socket C to communicate with Process #3
Process #3 uses socket D to communicate with Process #2

请注意,在上面的示例中,进程#2 不能重用套接字 B 与进程#3 通信,因为它需要套接字 B 与进程#1 通信。进程 #2 不能将套接字 A 用于任何事情,因为套接字 A 保留给进程 #1 使用(如果进程 #2 尝试使用它的套接字 A,则进程 #2 只会在套接字 B 上向自身发送字节,这不是一件有用的事情)

于 2021-12-07T04:29:08.080 回答