叉父子沟通(Fork parent child communication)

2019-07-17 21:24发布

我需要一些方法父进程与每个孩子单独沟通。

我有一些孩子需要与母公司独立于其它孩子沟通。

有没有什么办法对父母有每个孩子的私人沟通渠道?

也可以例如孩子,发送到父结构变量?

我是新来的这几样东西,所以任何帮助表示赞赏。 谢谢

Answer 1:

(我只是假设我们在这里谈论的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;
   }

该代码是不言自明:

  1. 家长叉()
  2. 孩子在读()从管直到EOF
  3. 家长写()来管然后关闭()它
  4. DATAS已共享,万岁!

从那里,你可以做任何你想要的; 只记得检查返回值和阅读duppipeforkwait ...手册,他们会派上用场。

还有一堆其他的方式来在进程间共享DATAS,他们migh你感兴趣,虽然他们不符合你的“私人”的要求:

  • 共享内存“SHM” ,这个名字说明了一切......
  • 插座 ,他们显然在本地使用好工作
  • FIFO文件这基本上是一个名字管道

甚至一个简单的文件...(我甚至使用SIGUSR1 / 2 信号在进程间发送二进制DATAS一次......但我不会建议,哈哈。)而可能更多一些,我不是想右现在。

祝好运。



文章来源: Fork parent child communication
标签: c fork ipc