我正在使用一個使用qdbm來維護鍵值存儲的程序(將qdbm鏈接到程序中)。在某些情況下,進程會在qdbm數據庫中添加一個值,然後通過調用外部init腳本(通過system())重新啓動它自己。看來有時寫入qdbm數據庫的值實際上並沒有粘住,我想知道是否可能是由於在通過SIGTERM終止進程之前數據沒有被刷新到磁盤。由於qdbm使用write()系統調用(相對於fwrite()庫函數)寫入數據,所以我認爲Linux內核應該知道最終將所有內容刷新到磁盤(系統不會重新啓動,只是過程)。另外,在進程被終止之前,close()在FD上被調用。如果進程被終止,將通過write()寫入的數據刷新到磁盤上嗎?
所以,我的理解是正確的,或者我需要添加一些fdatasync()或類似的調用在那裏的某個地方?此處的權威引用關於語義的鏈接也將被讚賞。
https://www.gnu.org/software/libc/manual/html_node/Termination-Internals.html#Termination-Internals是您想要的權威參考嗎?引用:*請注意,流程終止時不會自動刷新流;請參閱Streams上的I/O * –