【问题标题】:Locked file or directory in CC中锁定的文件或目录
【发布时间】:2009-05-03 20:36:14
【问题描述】:

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

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

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

【问题讨论】:

    标签: c linux


    【解决方案1】:

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

    【讨论】:

    • 如你所说,最不可能是文件锁定。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 2023-03-13
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多