我有一个用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杀死主程序,并且孩子继续运行。我再次调用主程序,它进入使用上述相同程序重新建立通信的部分,打开相同的文件。然后我尝试向孩子发送信息,但他没有收到任何信息。
有没有人知道如何重新建立这种沟通?