You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux中read系统调用是否触发EINTR?慢速设备含磁盘吗?(SA_INTERRUPT设置时)

Linux下read系统调用与EINTR及慢速设备的疑问解答

1. read系统调用是否会触发EINTR错误(设置SA_INTERRUPT时)

  • 分场景判断:
    • 若读取终端、管道、套接字、磁带机这类设备,当read处于阻塞等待状态时被信号中断,且已设置SA_INTERRUPT标志,此时read会立即返回并触发EINTR错误码。
    • 若读取的是常规磁盘文件,即便设置了SA_INTERRUPT,read调用也不会触发EINTR。原因是这类读取要么直接从页缓存拿数据(无阻塞),要么内核处理磁盘IO时不会让用户态的read因信号中断返回错误,而是会等IO完成后再返回结果。

2. “慢速”设备是否包含磁盘设备?

  • Linux里的“慢速设备”指的是会让系统调用长时间阻塞、且无法预判IO完成时间的设备,典型的有终端、伪终端、管道、FIFO、网络套接字、磁带机等。
  • 磁盘设备(常规文件)不属于慢速设备。尽管磁盘IO需要耗时,但内核通过页缓存优化了读写流程,且常规文件的read/write系统调用不会因信号中断返回EINTR,这和慢速设备的行为有明显区别。

内容的提问来源于stack exchange,提问作者Markity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:11:04