read
和write
函数(以及send
,recv
,readv
,...等亲属)可以返回少于如果被信号中断(在某些情况下),也可能在其他情况下,请求的读/写长度。是否存在明确定义的条件,以确定何时会发生这种情况,还是在很大程度上取决于实施?以下是我对以下答案感兴趣的一些特殊问题:
SA_RESTART
),则会在信号处理程序返回后重新传输任何数据之前导致IO操作中断。但是如果已经发生了部分读/写并且信号处理程序是非中断的,那么系统调用会立即返回部分长度,还是会恢复尝试读/写余数?我对所有三种标准要求,常见和特定于Linux的行为感兴趣。
答案 0 :(得分:2)
对于第二个问题:如果非阻塞
,写入可以返回有限缓冲区大小的短写入答案 1 :(得分:1)
至少有一个标准条件可能导致在常规文件上写入以返回短大小:
如果write()请求更多字节 写的比有空间的 例如,[XSI]文件大小限制 过程或物理结束 一个媒体),只有那么多的字节 是写的空间。对于 例如,假设有20个空间 在到达之前文件中的字节数更多 限制。写入512字节 返回20.下一个写的 非零字节数会给出一个 失败的回归(除非另有说明) 下文)。