2009-05-03 44 views
0

我有一個守護進程,用於監視某個文件的更改,然後處理對該文件所做的更改。C中的鎖定文件或目錄

但現在我注意到,當我嘗試讀取文件(使用fgets)時,我沒有收到任何數據。這隻發生在對文件進行更改後發生,但如果我在任何其他時間嘗試讀取文件,我可以很好地閱讀它。

我想另一個進程在我嘗試讀取文件時鎖定了文件。我如何確定文件是否被鎖定?

回答

5

當fgets()爲EOF返回NULL時,它會設置一個條件,即使存在其他數據,也需要使用clearerr()清除。 (在Linux上唯一常見的文件鎖定類型是建議性的,所以這很可能不是你的問題,inotify可能是更好的檢測文件修改的解決方案http://en.wikipedia.org/wiki/Inotify

+0

正如你所說,它最不可能是文件鎖定。 – 2009-05-03 21:22:54

0

嘗試使用ferror()檢查錯誤, - 正如戴夫指出的,你應該在fgets之前調用clearerr()來檢查它