读书人

linux中fifo管道通讯有关问题

发布时间: 2012-05-13 16:39:43 作者: rapoo

linux中fifo管道通讯问题
我有两个进程
进程1的工作:
mkfifo(fname, 0666);
recfd = open(fname, O_WRONLY);
while(1)
{
write(...);
}

进程2,
fd = open(fname, O_RDONLY);
while(1)
{
read(...);
}
close(fd);

通讯本身是没问题的。
问题在于,当进程2退出,最后 close(fd)之后
进程1不知道,它还在write
然而,write时,被退出了,连个错误都没有就无声无息的退出了。

而,我期望的是,进程1一直在,进程2多次去读
当进程2退出时,进程1就阻塞即可。

请教各位大神,咋整?

[解决办法]
还没告诉楼主怎么解决问题,是这样解决的:

1,写进程捕获SIGPIPE或者忽略SIGPIPE
2,如果write发生错误,且errno == SIGPIPE, 则close(fd),循环重新执行到open阻塞等待写打开。

祝你成功。

读书人网 >C语言

热点推荐