Chinaunix
标题:
unix/linux中系统调用write返回EPIPE还是EINTR
[打印本页]
作者:
kkshaq
时间:
2016-08-29 17:49
标题:
unix/linux中系统调用write返回EPIPE还是EINTR
linux/unix 慢系统调用的函数write,在系写入数据之前,有信号产生则返回EINTR错误,The call was interrupted by a signal before any data was written; see signal(7).
在socket编程中write,如果产生SIGPIPE信号,默认的操作是终止程序,我们可以设置信号处理函数,使write返回-1,置ERRNO为EPIPE。
为什么write系统调用,在SIGPIPE发生之后,返回的错误不是EINTR,而是EPIPE???
是不是可以这么理解,write socket产生SIGPIPE信号是立即生成的,write此时根本就没有堵塞就生成信号了,所以返回的是EPIPE错误??
如果在write堵塞等待的期间,我们人为手动地生成SIGPIPE信号,并设置其信号处理函数。则此时write应该返回EINTR错误,而不是EPIPE?
希望了解的赐教,谢谢,非常困惑!!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2