为多个 forks() 创建 socketpairs() 或一个就足够了
create socketpairs() for multiple forks() or just one is enough
我正在尝试制作一个执行以下操作的程序:
./run cmd1 arg1 : cmd2 arg2 : cmd3 arg3
允许我 运行 三个命令,例如并行使用 fork()
和 execvp
并使用 [=13 将 cmd 1 的输出连接到 cmd 2 的输入=] 仅。
我的问题是:
我是否需要为我使用的每个命令创建多个套接字对,或者我可以使用相同的套接字对,我只是一次又一次地使用它?
谢谢
您应该为每个需要使用的父子通信创建一个单独的套接字对-link。
例如,您的程序的结构可能如下所示:
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 上向自身发送字节,这这不是一件有用的事情)
我正在尝试制作一个执行以下操作的程序:
./run cmd1 arg1 : cmd2 arg2 : cmd3 arg3
允许我 运行 三个命令,例如并行使用 fork()
和 execvp
并使用 [=13 将 cmd 1 的输出连接到 cmd 2 的输入=] 仅。
我的问题是:
我是否需要为我使用的每个命令创建多个套接字对,或者我可以使用相同的套接字对,我只是一次又一次地使用它?
谢谢
您应该为每个需要使用的父子通信创建一个单独的套接字对-link。
例如,您的程序的结构可能如下所示:
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 上向自身发送字节,这这不是一件有用的事情)