显然,一般来说,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(使用前将#替换为@)