我有一段遺留代碼發佈到fsync
調用fstat
呼叫前確定目標文件的文件大小。 (具體的代碼只訪問st_size出來的統計結構的。)任何理由在通話前致電FSYNC到FSTAT
說完看了看文檔,我不相信這是一個必要的電話,但我想專家的意見。
我有一段遺留代碼發佈到fsync
調用fstat
呼叫前確定目標文件的文件大小。 (具體的代碼只訪問st_size出來的統計結構的。)任何理由在通話前致電FSYNC到FSTAT
說完看了看文檔,我不相信這是一個必要的電話,但我想專家的意見。
在一個正確實施文件系統,發放到fsync
或fdatasync
一個電話應該不會影響任何後續stat
/fstat
/lstat
調用的結果。它的唯一影響應該是任何未刷新的寫入,並且在fsync
的情況下,任何修改的元數據都被提交到永久存儲。無論實際數據是否已永久存儲,stat
及其變體都可以在緩存寫入時正常工作。
這就是說,fstat
是否需要在一塊,你正在學習的代碼是一種文字遊戲,並取決於如何fstat
結果被使用。例如:
如果是用於因誤以爲fsync
需要被稱爲是能夠獲得當前的元數據與stat
,那麼你也許可以將其刪除。
如果它被用來例如寫一些檢查點數據,然後它並不是完全不相關的,儘管可能需要調用調用順序 - 對於不斷增長的文件,檢查點數據需要指出文件的某些部分確實已永久存儲,因此它會是有意義的調用fstat
,然後呼叫fsync
*,然後寫檢查點信息。
如果將它用作某種I/O綁定操作的UI進度監視器,則顯示已實際提交到磁盤的數據量可能是有意義的。但是,在這種情況下,監視器的精度並不重要,因此呼叫順序可能無關緊要。
那麼,如何是的fstat
結果在你的情況下使用?
聲明:可能存在的文件系統實現在那裏,例如聯網/分佈式,其中調用fsync
可能會更新本地客戶端元數據緩存中的文件。在那種情況下,fsync
調用確實可以提高代碼的可靠性。如果是這樣的話,但是,那麼你可能有問題,不如一點點性能問題...
感謝便條。它是一個很好的答案。我的問題是,我們提供了fstat作爲服務的結果,並讓調用者訪問我們的效用函數來決定如何使用它。我認爲我們可以在沒有打電話的情況下離開,我只需要查看我們的文檔以及如何使用它。 – Pablitorun 2013-02-19 17:04:23