我有一个用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立这种沟通?