时间:2010-05-04 12:34:57

标签: c pipe

在C中写入管道之前,是否有一种简单的方法可以检查管道是否已关闭?我有一个子进程和父进程,父进程有一个写入子进程的管道。但是,如果孩子关闭管道而父母试图读取 - 我的管道出错了。

那么如何检查以确保我可以写入管道,所以如果我不能,我可以将其作为错误处理?谢谢!

2 个答案:

答案 0 :(得分:7)

一种简单的检查方法是对管道进行0字节写入(2)并检查返回。如果您正在捕获SIGPIPE或检查EPIPE,则会收到错误消息。但这就像你继续做真正的写,检查错误返回一样。因此,只需在信号处理程序(SIGPIPE)中执行写入和处理错误,或者,如果忽略信号,则通过检查写入错误返回来执行错误。

答案 1 :(得分:3)

如何尝试编写和处理错误?与写入文件或数据库的方式相同。我认为这个成语没有价值:

check if *this* is going to work
do *this*

你只是介绍一个更小的,更难以接受测试的机会之窗:

check if *this* is going to work
   child thinks "Ha, fooled you, I'm off now!"
do *this*, which now fails!