在Linux中使用tee()函数时确定读取器已关闭

3

当使用tee()系统调用将数据从一个管道移动到另一个管道时,如果输入管道的写入端关闭,它将返回0,但是如何判断输出管道的读取端是否关闭?

1个回答

2

对于未来的开发者而言,看起来答案是tee()函数将返回-1表示错误,并将errno设置为EPIPE,当管道读取器已经关闭时,即使这在手册中没有记录。相应地,会生成一个SIGPIPE信号,请确保正确处理它,如果您希望程序继续执行。


一个处理 SIGPIPE 的替代方法是忽略它;这样与 write() 相关的调用就会返回错误,并将 errno 设置为 EPIPE,表示问题出现了。如果 tee() 可以生成 SIGPIPE(很有道理),那么你必须在处理或忽略 SIGPIPE 以获得 -1EPIPE 状态。 - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接