可以进行短读/写的条件是什么?

R..*_*R.. 6 c posix signals

readwrite功能(和亲戚一样send,recv,readv,...)可以在其他情况下,返回一个数字小于所请求的读/写字节长度,如果信号中断(在某些情况下),也许太.是否存在明确定义的条件,以确定何时会发生这种情况,还是在很大程度上取决于实施?以下是我对以下答案感兴趣的一些特殊问题:

  • 如果信号处理程序是非中断(SA_RESTART),则会在信号处理程序返回后重新传输任何数据之前导致IO操作中断.但是如果已经发生了部分读/写并且信号处理程序是非中断的,那么系统调用是否会立即以部分长度返回,还是会恢复尝试读/写余数?
  • 显然,当可用的数据少于请求数量时,读取函数可以返回网络,管道和终端文件描述符上的短读取.但是由于缓冲区大小有限,写入函数可以在这些情况下返回短写入,还是会阻塞直到所有数据都被写入?

我会对所有三种标准 - 所需,常见和特定于Linux的行为感兴趣.

Hei*_*bug 2

对于你的第二个问题:如果它是非阻塞的, write 可以返回有限缓冲区大小的短写入