[英]Understanding read syscall
我正在閱讀手冊頁的man read
,發現可以讀取的字數少於所需的作為參數傳遞的字節數:
如果此數目小於請求的字節數,這不是錯誤; 例如,這可能是因為當前實際可用的字節較少(可能是因為我們接近文件末尾,或者因為我們正在從管道或終端讀取),或者因為read()被中斷了通過信號。
我有以下情況:
IN_MOVED_TO
inotify事件的目錄中。 IN_MOVED_TO
事件,打開一個文件並開始讀取它,直到到達EOF 1.
文件(移動后,它始終保持不變)。 是否可以保證如果read
返回的字節數少於我請求的字節數,則下一個read
調用將返回0? 我的意思是該文檔禁止類似“以千兆字節文件的單個字節讀取1000000000000”的情況
是否可以保證如果read返回的字節數少於我請求的字節數,則下一個read調用將返回0?
不,實際上沒有。 如果文件系統完全符合POSIX,但其中許多不兼容(在極端情況下),則應為true。 特別是NFS(請參閱nfs(5) )和FUSE或proc(請參閱proc(5) )並不完全符合POSIX。
因此,在實踐中,我強烈建議您處理“ read
返回的字節數少於所需大小寫的字節數”,即使您有理由相信它不會發生也是如此。 處理“不可能”的情況對您來說應該很容易。
還要注意, inotify(7)工具不能與NFS,proc,FUSE等離奇的文件系統一起使用。...還可以考慮在Ext4文件系統內部,與NFS文件建立符號鏈接等極端情況; 或綁定坐騎等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.