0
沒有設置爲EIO我有安裝我的系統上遠程磁盤使用NFS,我試圖用PWRITE()API寫上安裝遠程磁盤中的文件。錯誤而使用PWRITE()API
它不發生的每一次,但在某些情況下,在做I/O PWRITE()失敗,錯誤號設置爲EIO(輸入/輸出錯誤)。
能有人請解釋爲什麼發生在首位這個錯誤,是有什麼辦法可以糾正嗎?
感謝
沒有設置爲EIO我有安裝我的系統上遠程磁盤使用NFS,我試圖用PWRITE()API寫上安裝遠程磁盤中的文件。錯誤而使用PWRITE()API
它不發生的每一次,但在某些情況下,在做I/O PWRITE()失敗,錯誤號設置爲EIO(輸入/輸出錯誤)。
能有人請解釋爲什麼發生在首位這個錯誤,是有什麼辦法可以糾正嗎?
感謝
從閱讀(壞的)經驗和寫入NFS
基於文件,我瞭解到,你有一個很好的機會,通過簡單地重試失敗的I/O操作(read()
,write()
)來解決這個EIO
左右。
同樣在NFS
一個不能假設read()
/write()
做傳輸指定的數據量,所以這是好主意,要經常檢查有問題的功能有多少字節被轉移的返回值。
我看問題的基本NFS
功能或NFS
駕駛員的結果由內核處理的方式,所以我強烈認爲pread()
/pwrite()
表現出同樣的效果,因爲我使用read()
/write()
時親眼目睹。
你有一個最小的測試程序(比如說,在隨機偏移寫隨機長度塊到一個固定大小的目標文件)表現出的問題驗證?通常'EIO'只是由於底層設備或文件系統存在錯誤(如描述符已關閉)或真正的讀/寫錯誤。在某些情況下'PWRITE()'可以依靠'lseek的()'(客戶端或服務器上),它是由兩個並行作家的衝突可能最終爲'errno' =='EIO'可行呢。通過一個小型測試用例,可以在兩個不同的客戶端上同時寫入同一個文件,您可以輕鬆驗證。 –
是的,我只是在一個文件的隨機偏移位置進行I/O操作。但是現在只有一個線程正在使用pwrite()對掛載服務器上的文件執行I/O操作(對單個文件沒有併發寫入操作)。我相信文件描述符沒有關閉。它可能是NFS接口的問題嗎? – sam32
可能是網絡問題? –