C中的锁定文件或目录

时间:2009-05-03 20:36:15

标签: c linux

我有一个守护程序,它监视某个文件的更改,然后处理对该文件所做的更改。

但是现在我注意到当我尝试读取文件时(使用fgets)我没有数据。这只发生在对文件进行更改后才会发生,但如果我在任何其他时间尝试读取该文件,我可以正常阅读。

我认为当我尝试读取文件时,另一个进程已将文件锁定。如何确定文件是否已锁定?

2 个答案:

答案 0 :(得分:5)

当fgets()为EOF返回NULL时,它会设置一个条件,您需要使用clearerr()清除它,尽管存在其他数据。 (Linux上唯一常见的文件锁定类型是建议性的,因此很可能不是您的问题.inotify可能是检测文件更改的更好解决方案。http://en.wikipedia.org/wiki/Inotify

答案 1 :(得分:0)

尝试使用ferror()检查错误,是的 - 正如Dave指出的那样,你应该在fgets之前调用clearerr()来检查它