FIFO – 在C ++中恢复通信

我有一个用C ++编写的主程序。 它使用vfork()和execl()触发子程序。 它们之间的通信使用FIFO(父母写和孩子读)完美地工作。

在主程序中build立通讯的顺序是

if (mkfifo(CONTROLLER_file, 0666) < 0) perror("mkfifo"); if((aux_fd = open(CONTROLLER_file, O_RDONLY | O_NONBLOCK) )< 0) perror("Opening error"); if((fd = open(CONTROLLER_file, O_WRONLY)) < 0) perror("Opening error"); 

我这样做是为了避免另一个进程在其他模式下打开文件的locking问题。

写作完成

 write(fd, write_buffer, sizeof(write_buffer)); 

在儿子,我做

 if (mkfifo(CONTROLLER_file, 0666) < 0) perror("mkfifo"); if((file_descriptor = open(CONTROLLER_file, O_RDONLY)) < 0) perror("Opening error"); 

我读了

 if (mkfifo(CONTROLLER_file, 0666) < 0) perror("mkfifo"); if((file_descriptor = open(CONTROLLER_file, O_RDONLY)) < 0) perror("Opening error"); 

消息已成功发送。

为了testing,我在Linuxterminal上使用kill终止主程序,孩子们继续运行。 我再次调用主程序,并进入与上述相同的程序重新build立通信的部分,打开相同的文件。 然后,我试图给孩子发消息,但他什么都没收到。

有没有人有任何想法,我可以重新build立这种沟通?