我們正在開發iMX6Sx飛思卡爾開發板,用Yocto構建Linux內核發行版。 我想知道是否有辦法檢查是否有可能檢查文件系統操作(特別是寫入)是否是真的已終止,從而避免在操作仍在運行時關閉/終止進程。要更加清楚:當我們的應用程序必須關閉時,我們必須做一些操作(文件副本,寫入,...),並且我們必須知道(因爲它們是我認爲的異步),當它們真的完成了。文件系統操作確實「刷新」
在此先感謝 安德烈
我們正在開發iMX6Sx飛思卡爾開發板,用Yocto構建Linux內核發行版。 我想知道是否有辦法檢查是否有可能檢查文件系統操作(特別是寫入)是否是真的已終止,從而避免在操作仍在運行時關閉/終止進程。要更加清楚:當我們的應用程序必須關閉時,我們必須做一些操作(文件副本,寫入,...),並且我們必須知道(因爲它們是我認爲的異步),當它們真的完成了。文件系統操作確實「刷新」
在此先感謝 安德烈
如果你想確保所有的寫操作都致力於爲存儲和文件系統更新:
當這兩個都完成後,ke rnel已經刷新了內存中的所有內容,並確保文件系統針對您操作的文件進行了更新。
另一種方法是調用sync(),它確保將所有內核數據寫入所有文件和文件系統元數據的存儲中。
注:
如果您的應用程序與文件工作*而不是文件描述符,你需要首先保證寫入的數據是從應用程序到內核刷新,通過調用fflush()或FCLOSE FILE *
如果你殺了一個應用程序,它所執行的任何寫操作都不會被取消或中斷,你可以通過調用sync()或者打開同一個文件並調用fsync() ) 在上面。
如果你任意殺死一個應用程序,你不可能期望每件事都是一致的,也許應用程序正在對數據庫,配置文件等進行2次重要寫入,並且在1次寫入後終止它,該文件可能會根據其格式受損。
非常感謝您對我的問題的完整答案。 sync()是我們需要的,因爲我們的應用程序並不直接控制所有的複製/寫入操作(它不知道涉及的所有文件描述符)。 – Andre