2009-05-03 79 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()来检查它