从文件系统“短读”,什么时候会发生?

2023-12-26

显然,一般来说,read(2) 系统调用返回的字节数少于要求读取的字节数。然而,相当多的程序假设在处理本地文件时,read(2)返回的值永远不会小于所要求的值(当然,除非文件更短)。

所以,我的问题是:在 Linux 上,如果从打开的文件读取并且未遇到 EOF 并且读取的量最多为几千字节,在什么情况下 read(2) 返回的结果会小于请求的值?

一些猜测:

  • 接收到的信号可以中断这样的读取,但不会使其失败吗?
  • 不同的文件系统会影响此行为吗? jffs2有什么特别的吗?

POSIX.1-2008 状态 http://www.opengroup.org/onlinepubs/9699919799/functions/read.html:

返回的值可能小于nbyte如果剩余的字节数 文件小于nbyte,如果read()请求被中断 信号,或者如果文件是管道或 FIFO 或特殊文件且数量较少 比nbyte立即可用的字节数 用于阅读。

基于磁盘的文件系统通常使用不间断读取,这意味着 读操作通常不能被信号中断。基于网络 文件系统有时使用可中断读取,它可以返回部分数据或不返回数据。 (对于 NFS,可以使用以下命令进行配置intr安装选项。) 他们有时也会实施超时。

请记住,即使 /some/argumentary/file/path 也可能引用 FIFO 或 特殊文件,所以您认为是常规文件的可能不是。因此是 处理部分读取的好习惯,即使它们不太可能发生。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从文件系统“短读”,什么时候会发生? 的相关文章

随机推荐