【发布时间】:2014-12-09 08:14:58
【问题描述】:
是否可以在尝试写入/读取之前检查管道是否损坏,以便我可以跳过它并继续执行程序?
我正在使用while 循环写入从父级到多个子级通信的管道。在循环过程中,几个孩子将关闭。当循环出现并尝试再次写入它们时,我的程序将关闭,因为它被 SIGPIPE 杀死,因为管道已损坏。我知道管道坏了,我给孩子们编程关闭管道并退出(必要)。我仍然想完成循环并继续执行程序。我希望它检查管道是否损坏,如果损坏则跳过它(没有错误输出),然后继续执行程序(其他孩子仍然需要写入)。
那么,有可能吗? c 中的示例会很棒。
这是我所问问题的简单伪代码表示:
int i = 0;
while(i != 5)
{
if (mypipe[WRITE] is BROKEN)
//Do Nothing ---Basically Skip
else if (some condition)
write(mypipe[WRITE]);
i++;
}
这个问题与我的previous post 有关,尽管我的问题的上下文不同。您可以在那里查看实际程序的代码。
【问题讨论】:
-
我认为 pthread 中的一些线程利用率可能会有所帮助。
-
作为一种解决方法,孩子可以通知父母(通过管道?)他们已经完成,关闭管道是父母的责任。
标签: c linux pipe posix sigpipe