根据pipe(7)
:
如果所有引用管道读取端的文件描述符都已关闭,则将导致
write(2)
为SIGPIPE
调用进程生成信号。如果调用进程忽略此信号,则将write(2)
失败并显示错误EPIPE
。
为什么 Unix 需要信号,SIGPIPE
而write()
可以直接返回EPIPE
?我的理解是,信号用于本质上是异步的事物(例如终止子进程、终端中断)。但SIGPIPE
只会作为对 的调用的直接结果而生成write()
,在这种情况下,它总是可以返回EPIPE
到调用者以向调用者表示错误。
SIGPIPE
为什么除了之外还有必要有EPIPE
?