2

据我所知,从常规文件读取时read()不能被信号中断并返回,同样在写入常规文件时也是如此。errno=EINTRwrite()

这与从终端、管道、套接字等读取或写入相反。

这在 Linux 上是否正确?

这是 POSIX 规定的吗?

编辑:假设我们正在讨论未配置为自动重新启动系统调用的信号中断。

4

1 回答 1

0

实际上,大多数程序都期望这种行为,但如果确实发生了 EINTR,结果代码将指示实际读取了多少字节,可能为零。因此,如果您进行了防御性编码以正确处理短读取(使用循环通过 n 重试 len - n 来推进指针),那么您甚至不会注意到。出于这个原因,我总是将网络读取放在循环中。而且由于一切都是文件,您无法真正知道您的调用者没有为您提供 TCP 连接,因此最好期待短读。

我不是规范律师,所以我不知道也不关心规范说什么。实际上,它不会发生……除非它发生了。

于 2016-02-06T09:33:10.633 回答