【发布时间】:2020-08-26 08:55:03
【问题描述】:
来自write()的手册页
请注意,成功的 write() 可能传输少于 count 个字节。 这种部分写入可能由于各种原因而发生;例如, 因为磁盘设备上没有足够的空间来写所有 请求的字节数,或者因为 阻塞了对套接字的 write(), 管道,或类似的被信号处理程序打断 转移了一些,但在转移所有请求之前 字节。在部分写入的情况下,调用者可以进行另一个 write() 调用以传输剩余的字节。随后的调用 将传输更多字节或可能导致错误(例如, 如果磁盘现在已满)。
我有以下问题
1) 如果write() 在部分传输后被信号处理程序中断,write() 会将errno 设置为EINTR 吗?
2) 如果没有设置errno,有没有办法在没有额外代码的情况下识别这样的事件(比如安装信号处理并将标志值设置为true)?
注意:进一步的write()调用在信号中断事件后成功传输剩余字节。
【问题讨论】:
标签: c linux network-programming posix