我正在linux上記錄日誌。
記錄器在init上打開一個文件。
並在程序運行時寫入該文件描述符。
如果日誌文件將在文件描述符創建後被刪除,
將不會檢測到異常/錯誤。
我曾嘗試:ofstream - 檢測文件是否在打開和關閉之間被刪除
out.fail()
!out.is_open()
我有谷歌這個,發現這個職位。
http://www.daniweb.com/forums/thread23244.html
所以我現在明白,即使該文件被刪除通過使用rm。它仍然存在,它完全沒有聯繫。
處理這個問題的最佳方法是什麼?
1.這是一個日誌應用程序,所以性能是一個問題,我不想在每次寫入時使用stat()
2.我不在乎日誌文件中的某些行是否會在開始
3.允許用戶刪除日誌文件,重新開始。記錄器應該重新打開文件。
你用什麼函數寫入文件? 例如對於fwrite,您可以測試返回結果。如果大小不同於預期,然後重新打開(創建)文件.. – 2010-02-04 11:05:23
@ Dyatlov測試結果不會幫助,因爲文件存在它只是取消鏈接,寫成功。檢查文件大小也是如此,謝謝 – jojo 2010-02-04 12:15:10
我在調查同樣的問題時遇到了這個問題,除了做刪除的過程是logrotate - 我的情況要修復得更乾淨 - logrotate有一個選項 - copytruncate - 它會通過根本不刪除文件來解決此問題。 – 2013-04-15 23:54:57