我正在阅读man read
手册页,发现可以读取的字节数少于参数传递的所需字节数:
如果此数字小于字节数,则不是错误 要求;例如,这可能是因为较少的字节 现在可以实际使用(也许是因为我们离 文件结尾,或者因为我们正在从管道读取,或者从 终端),或者因为read()被信号中断。
我有以下情况:
IN_MOVED_TO
inotify事件目录中。IN_MOVED_TO
事件,打开一个文件并开始读取它,直到达到EOF为止。1.
文件(移动后,它始终保持不变)是否可以保证,如果read
返回的字节数少于我请求的字节数,则对read
的下一次调用将返回0?我的意思是说文档禁止类似“用1字节读取1亿字节的文件”这样的情况
答案 0 :(得分:1)
是否可以确保如果read返回的字节数少于我请求的字节数,则下一个read调用将返回0?
不,实际上没有。如果文件系统完全符合POSIX,但其中许多不兼容(在极端情况下),则应为true。特别是NFS(请参阅nfs(5)和FUSE或proc(请参阅proc(5))并不完全符合POSIX。
因此,在实践中,我强烈建议处理“ read
返回的字节数少于所需的情况”,即使您正确地相信不应发生这种情况也是如此。处理“不可能”的情况对您来说应该很容易。
还请注意,inotify(7)工具不适用于NFS,proc,FUSE等离奇的文件系统……还要考虑一下在Ext4文件系统内部与NFS文件的符号链接等极端情况;或绑定坐骑等...