【发布时间】:2011-07-23 11:49:15
【问题描述】:
如果被信号(在某些情况下),也许在其他情况下也是如此。是否有一套明确定义的条件来确定何时发生这种情况,还是很大程度上取决于实施?以下是一些我对答案感兴趣的特定问题:
- 如果信号处理程序是非中断的 (
SA_RESTART),这将导致 IO 操作在信号处理程序返回后重新开始传输任何数据之前中断。但是如果已经发生了部分读/写并且信号处理程序没有中断,系统调用会立即返回部分长度,还是会继续尝试读/写剩余部分? - 当可用数据少于请求的数量时,显然读取函数可以返回对网络、管道和终端文件描述符的短读取。但是由于缓冲区大小有限,写入函数在这些情况下是否可以返回短写入,或者它们会阻塞直到可以写入所有数据?
我会对标准要求、常见和特定于 Linux 的所有三种行为感兴趣。
【问题讨论】: