我需要一些方法让父进程分别与每个孩子进行通信。
我有些孩子需要与其他孩子分开与父母沟通。
父母是否有办法与每个孩子建立私人沟通渠道?
例如,孩子也可以向父母发送一个struct变量吗?
我是这些事情的新手,所以任何帮助都会受到赞赏。谢谢
答案 0 :(得分:31)
(我只是假设我们在这里谈论linux)
正如您可能发现的那样,fork()
本身只会复制调用进程,它无法处理IPC。
来自fork手册:
fork()通过复制调用进程来创建一个新进程。 这个被称为孩子的新过程完全相同 调用过程,称为父母。
分叉()后处理IPC的最常用方法是使用管道,特别是如果你想要"私人通信chanel与每个孩子"。这是一个典型且简单易用的示例,类似于您在pipe
手册中可以找到的示例(未检查返回值):
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int
main(int argc, char * argv[])
{
int pipefd[2];
pid_t cpid;
char buf;
pipe(pipefd); // create the pipe
cpid = fork(); // duplicate the current process
if (cpid == 0) // if I am the child then
{
close(pipefd[1]); // close the write-end of the pipe, I'm not going to use it
while (read(pipefd[0], &buf, 1) > 0) // read while EOF
write(1, &buf, 1);
write(1, "\n", 1);
close(pipefd[0]); // close the read-end of the pipe
exit(EXIT_SUCCESS);
}
else // if I am the parent then
{
close(pipefd[0]); // close the read-end of the pipe, I'm not going to use it
write(pipefd[1], argv[1], strlen(argv[1])); // send the content of argv[1] to the reader
close(pipefd[1]); // close the write-end of the pipe, thus sending EOF to the reader
wait(NULL); // wait for the child process to exit before I do the same
exit(EXIT_SUCCESS);
}
return 0;
}
代码非常明显:
从那里你可以做任何你想做的事;只需记住检查您的返回值并阅读dup
,pipe
,fork
,wait
...手册,它们就会派上用场。
还有许多其他方法可以在进程之间共享数据,虽然它们不符合您的&#34;私有&#34;要求:
甚至是一个简单的文件...(我甚至使用SIGUSR1 / 2 signals在进程之间发送一次二进制数据......但我不推荐哈哈。) 可能还有一些我现在没有想到的事情。
祝你好运。