2013-02-15 27 views
1

我有一段遺留代碼發佈到fsync調用fstat呼叫前確定目標文件的文件大小。 (具體的代碼只訪問st_size出來的統計結構的。)任何理由在通話前致電FSYNC到FSTAT

說完看了看文檔,我不相信這是一個必要的電話,但我想專家的意見。

回答

1

在一個正確實施文件系統,發放到fsyncfdatasync一個電話應該不會影響任何後續stat/fstat/lstat調用的結果。它的唯一影響應該是任何未刷新的寫入,並且在fsync的情況下,任何修改的元數據都被提交到永久存儲。無論實際數據是否已永久存儲,stat及其變體都可以在緩存寫入時正常工作。

這就是說,fstat是否需要在一塊,你正在學習的代碼是一種文字遊戲,並取決於如何fstat結果被使用。例如:

  • 如果是用於因誤以爲fsync需要被稱爲是能夠獲得當前的元數據與stat,那麼你也許可以將其刪除。

  • 如果它被用來例如寫一些檢查點數據,然後它並不是完全不相關的,儘管可能需要調用調用順序 - 對於不斷增長的文件,檢查點數據需要指出文件的某些部分確實已永久存儲,因此它會是有意義的調用fstat然後呼叫fsync *,然後寫檢查點信息。

  • 如果將它用作某種I/O綁定操作的UI進度監視器,則顯示已實際提交到磁盤的數據量可能是有意義的。但是,在這種情況下,監視器的精度並不重要,因此呼叫順序可能無關緊要。

那麼,如何fstat結果在你的情況下使用?

聲明:可能存在的文件系統實現在那裏,例如聯網/分佈式,其中調用fsync可能會更新本地客戶端元數據緩存中的文件。在那種情況下,fsync調用確實可以提高代碼的可靠性。如果是這樣的話,但是,那麼你可能有問題,不如一點點性能問題...

+0

感謝便條。它是一個很好的答案。我的問題是,我們提供了fstat作爲服務的結果,並讓調用者訪問我們的效用函數來決定如何使用它。我認爲我們可以在沒有打電話的情況下離開,我只需要查看我們的文檔以及如何使用它。 – Pablitorun 2013-02-19 17:04:23