【发布时间】:2012-04-16 17:20:17
【问题描述】:
假设我们使用fopen() 打开了一个文件,并从收到的文件指针中使用fileno() 获取文件描述符。然后我们从这个文件中做很多(>10^8)随机的read()s 相对小的块,大小在 4Bytes 到 10KBytes 之间:
如果文件系统是一个errno,那么在不设置errno的情况下,read()这样的预期行为是否可能返回比请求更少的字节数
ext3NFSOCFS22 和 3 的组合(
OCFS2通过NFS)
?
我的读数给了我一个结论,它不应该是 1.(如果文件没有设置 O_NONBLOCK,如果可能的话,ext3 设置它)但对于其他三个(2., 3 ., 4.) 我不确定。
(顺便说一句:我可以假设在任何情况下都没有将O_NONBLOCK 设置为默认值吗?)
之所以出现这个问题,是因为我观察到 read()s 返回的字节数少于在案例 4 中未设置 errno 的情况下请求的字节数。
通过测试深入研究的问题是,这种行为发生在
更新:平均文件大小在几 TBytes 和大约 1GByte 之间。
【问题讨论】:
-
明显的情况是在文件的末尾,它可能不是请求大小的倍数。 (另外,O_NONBLOCK 不在常规文件上实现)
-
哦,是的,文件结尾的情况太明显了,我忘了说我不是指的是这个情况...... - 感谢关于
O_NONBLOCK! @nos