FIFO - 用C ++恢复通信

时间:2016-11-18 11:52:41

标签: c++ linux ipc named-pipes fifo

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

在主程序中,建立通信的顺序是

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");

我这样做是为了避免锁定问题,等待另一个进程以其他模式打开文件。

完成写作
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");

邮件已成功发送。

为了测试我在Linux终端上使用kill杀死主程序,并且孩子继续运行。我再次调用主程序,它进入使用上述相同程序重新建立通信的部分,打开相同的文件。然后我尝试向孩子发送信息,但他没有收到任何信息。

有没有人知道如何重新建立这种沟通?

0 个答案:

没有答案