父进程退出,子进程open
我最近在学习进程间的FIFO通信,下面的代码中111111111已经打印了,但是222222222和333333333都没有打印,很奇怪,望各位大神指点。
int main()
{
pid_t pid;
char *path = "./file.fifo";
if((pid = fork()) == 0) { // clild
int fdfifo, fd;
int nread;
char buf[BUF_LEN] = { 0 };
mkfifo(path, 0777);
printf("111111111\n");
if((fdfifo = open(path, O_WRONLY))) == -1) {
printf("22222222\n");
}
printf("333333333333\n");
if((fd = open("./fifo.c", O_RDONLY)) == -1)
err_exit(1, "open ./fifo.c");
while((nread = read(fd, buf, BUF_LEN - 1)) > 0) {
printf("%s", buf);
memset(buf, 0, BUF_LEN);
}
} else if(pid > 0) { // parent
exit(0);
}
}
[解决办法]
打开FIFO只写阻塞了,要等到只读打开FIFO时才返回