如何在写入之前检查pipe道是否打开?

如果我写封闭的pipe道消息,然后我的程序崩溃

if (write(pipe, msg, strlen(msg)) == -1) { printf("Error occured when trying to write to the pipe\n"); } 

如何在写入之前检查pipe是否仍然打开?

Solutions Collecting From Web of "如何在写入之前检查pipe道是否打开?"

正确的方法是测试write的返回码,然后再检查errno

 if (write(pipe, msg, strlen(msg)) == -1) { if (errno == EPIPE) { /* Closed pipe. */ } } 

但是等等:写封闭的管道不仅返回-1, errno=EPIPE ,它还发送一个SIGPIPE信号,终止你的进程:

EPIPE fd连接到读取端关闭的管道或插座。 发生这种情况时,写入过程也会收到一个SIGPIPE信号。

所以在测试之前,你还需要忽略SIGPIPE

 if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) perror("signal");