我需要一些方法父进程与每个孩子单独沟通。
我有一些孩子需要与母公司独立于其它孩子沟通。
有没有什么办法对父母有每个孩子的私人沟通渠道?
也可以例如孩子,发送到父结构变量?
我是新来的这几样东西,所以任何帮助表示赞赏。 谢谢
我需要一些方法父进程与每个孩子单独沟通。
我有一些孩子需要与母公司独立于其它孩子沟通。
有没有什么办法对父母有每个孩子的私人沟通渠道?
也可以例如孩子,发送到父结构变量?
我是新来的这几样东西,所以任何帮助表示赞赏。 谢谢
(我只是假设我们在这里谈论的Linux)
正如你可能发现, fork()
本身只会重复调用进程,它不处理IPC 。
从叉手册:
叉()创建通过复制调用进程的新方法。 新工艺,被称为孩子,是调用进程完全相同的副本,被称为父。
处理IPC一旦你叉()最常见的方式是使用管道,特别是如果你想“每个孩子一个私人的交际香奈儿”。 下面是使用,类似于一个你可以在发现的典型和简单的例子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
...手册,他们会派上用场。
还有一堆其他的方式来在进程间共享DATAS,他们migh你感兴趣,虽然他们不符合你的“私人”的要求:
甚至一个简单的文件...(我甚至使用SIGUSR1 / 2 信号在进程间发送二进制DATAS一次......但我不会建议,哈哈。)而可能更多一些,我不是想右现在。
祝好运。