两兄弟怎么联系?

时间:2013-11-22 08:37:08

标签: c linux fork pipe

用C语言:

我有一个父亲在fork()的循环中生了两个儿子,我希望每个儿子都有(在pid_t类型下)他兄弟的进程ID。

我尝试通过管道这样做,但我没有成功。 你知道我怎么能这样做吗?

我是通过(write(pos[1],getpid(),sizeof(pid_t))做到这一点的(这个儿子发给他的兄弟他的pid) 但它不起作用......

谢谢!

2 个答案:

答案 0 :(得分:2)

兄弟进程通常不能通过管道相互通信。但你可以让父母将其他兄弟姐妹的pid发送给每个兄弟姐妹。要做到这一点,你当然需要设置两个管道,每个孩子一个。

  parent
    /\
   /  \
  /    \
son1   son2

父母需要一次创建一个儿子,然后当它知道两者都已成功启动时,它可以将每个子进程的兄弟的pid发送给每个子进程。

答案 1 :(得分:2)

Write需要一个指向要写入的数据的指针。 getpid返回进程ID,而不是指向进程ID的指针。您需要将getpid的返回值存储在变量中:

pid_t pid = getpid();
write(pos[1], &pid, sizeof(pid_t);

我假设pos [1]将管道的文件描述符保存到兄弟。