C 向子进程发送数据

C 向子进程发送数据,c,pipe,fork,C,Pipe,Fork,如果父进程有两个子进程,并且每个子进程都有自己的管道,那么父进程如何写入其每个子进程的管道?是否有任何方法可以调用一个进程可以指定特定子进程id的函数?在分叉之前,创建一个管道(fd对) fork,然后让父进程关闭管道的读取端,并将管道的写入端保存到pid\u to\u管道表中: if(0>(pid = fork())) /*handle err.*/; if(pid){ //parent if(0>save_pid_to_pipe(pid, pipe_fds[1]))

如果父进程有两个子进程,并且每个子进程都有自己的管道,那么父进程如何写入其每个子进程的管道?是否有任何方法可以调用一个进程可以指定特定子进程id的函数?

在分叉之前,创建一个管道(fd对)

fork
,然后让父进程关闭管道的读取端,并将管道的写入端保存到
pid\u to\u管道
表中:

if(0>(pid = fork())) /*handle err.*/;

if(pid){ //parent
     if(0>save_pid_to_pipe(pid, pipe_fds[1])) /*handle err.*/;
     close(pipe_fds[0]);
}
子级需要关闭最新管道的写入端:

close(pipe_fds[0]);
所有写入操作在父级的查找表中结束。 然后它可以等待
pipe_fds[0]上的指令(创建子级时最新的读取端),而父级可以通过查找表通过pid选择相应的写入端


您可以使用简单数组、排序数组、映射或哈希作为查找表。

否。您必须自己将pid与fd对(管道)耦合。(别忘了,每个进程都应该关闭它不使用的所有管道文件描述符,否则你会遇到问题,无法在需要的地方获得EOF)。我完全理解你的观点,但我仍然对将pid与fd对耦合感到困惑。你是怎么做到的?因为我要做的是创建一个子进程,使用if-else语句检查fork()的输出,如果有父进程,我创建另一个子进程并重复相同的if-else语句。然后,若它是父进程,我将从服务器接收消息。这里我想做的是,我想根据一些基本条件,将父进程接收到的消息发送给子进程。
close(pipe_fds[0]);