我正在做類似以下的事情
auto tempFd = mkstemp(filePathTemplate);
// 1) write to temp file, on error, unlink()
// 2) sync temp file, on error, unlink()
// 3) close temp file, on error, unlink()
// 4) rename to implement an atomic write, on error unlink()
在這里,如果程式在步驟 (4) 完全完成之前但在取消鏈接執行之前的任何地方崩潰,會發生什么情況?如果這種崩潰頻繁發生,臨時檔案會無限期地累積嗎?如果是這樣,如果程式不斷崩潰,是否有任何方法可以避免此類檔案的累積?
謝謝!
uj5u.com熱心網友回復:
該檔案將被洗掉或不被洗掉。如果它沒有被洗掉,它將一直存在直到你洗掉,或者如果你碰巧將檔案寫入一個 tmpfs(記憶體)支持的目錄,你重新啟動系統。
你寫一個日志(fsync;本地或遠程)你將要創建一個臨時檔案。當您啟動您的程式時,您會處理日志并洗掉您不關心的任何臨時檔案。如果你經常崩潰,并且如果你自動重啟你的行程,它會表現得像一個叉子風暴(用負載殺死盒子)。考慮指數延遲,或者如果你不能這樣做,實施一個“死信”概念,將麻煩放在一邊。
或者,在特殊目錄中創建臨時檔案并洗掉該目錄中的所有檔案。您可能對可以從 crontab 呼叫的程式 tmpreadper 感興趣。如果您的失敗率足夠高,這將失敗。
考慮使用 sqlite3。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533947.html
上一篇:可選動態庫
