就在我记忆中,read()
不能被信号打断,并且在从常规文件中读取时返回errno=EINTR
,同样在写入常规文件时返回write()
。
这与读取或写入终端,管道,插座等相反。
这在Linux上是否正确?
这是由POSIX强制执行的吗?
编辑:假设我们正在讨论未配置为自动重启系统调用的信号中断。
答案 0 :(得分:0)
实际上,大多数程序都期望这种行为,但如果EINTR确实发生了,结果代码将指示实际读取了多少字节,可能为零。因此,如果您已经进行了防御性编码以正确处理短读取(使用循环通过n重试len-n来指示指针),那么您甚至都不会注意到。出于这个原因,我总是把网络读取放在循环中。由于所有内容都是文件,因此您无法确定调用方没有为您提供TCP连接,因此最好提供短读取。
我不是规范律师,所以我不知道或不关心规范的内容。实际上,除非它发生,否则它不会发生。