正确的方法是测试的返回码,
write然后还要检查
errno:
if (write(pipe, msg, strlen(msg)) == -1) { if (errno == EPIPE) { }}
但是请稍等:写入封闭的管道不仅会返回-1
errno=EPIPE,而且还会发送一个
SIGPIPE终止进程的信号:
EPIPE fd连接到读数端关闭的管道或插座。发生这种情况时,写入过程还将收到SIGPIPE信号。
因此,在进行测试之前,您还需要 忽略SIGPIPE
:
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) perror("signal");
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)