【发布时间】:2009-05-03 20:36:14
【问题描述】:
我有一个守护进程,它监视某个文件的更改,然后处理对该文件所做的更改。
但现在我注意到,当我尝试读取文件(使用 fgets)时,我没有得到任何数据。这仅在对文件进行更改后发生,但如果我尝试在其他任何时间读取文件,我可以正常读取。
当我尝试读取文件时,我认为另一个进程已锁定该文件。如何判断文件是否被锁定?
【问题讨论】:
我有一个守护进程,它监视某个文件的更改,然后处理对该文件所做的更改。
但现在我注意到,当我尝试读取文件(使用 fgets)时,我没有得到任何数据。这仅在对文件进行更改后发生,但如果我尝试在其他任何时间读取文件,我可以正常读取。
当我尝试读取文件时,我认为另一个进程已锁定该文件。如何判断文件是否被锁定?
【问题讨论】:
当 fgets() 为 EOF 返回 NULL 时,它会设置一个条件,您需要使用 clearerr() 清除,尽管存在其他数据。 (Linux 上唯一常见的文件锁定类型是建议性的,所以这很可能不是您的问题。inotify 可能是检测文件更改的更好解决方案。http://en.wikipedia.org/wiki/Inotify)
【讨论】:
尝试使用 ferror() 检查错误,是的 - 正如 Dave 指出的那样,您应该在 fgets 进行检查之前调用 clearerr()
【讨论】: