【发布时间】:2011-01-04 20:07:44
【问题描述】:
我想知道,有没有一种简单的方法来判断另一个实体是否打开了某个文件以供写入?我没有时间连续使用 iNotify 来等待任何当前作家完成写作。我需要进行间歇性检查。 谢谢。
【问题讨论】:
-
您不能真正以非正常的方式使用此信息 - 即使某些函数告诉您该文件当前没有被写入,该信息可能已经过时了你的过程对它起作用的时间。如果您控制这两个进程,请使用
fcntl()咨询锁定。
我想知道,有没有一种简单的方法来判断另一个实体是否打开了某个文件以供写入?我没有时间连续使用 iNotify 来等待任何当前作家完成写作。我需要进行间歇性检查。 谢谢。
【问题讨论】:
fcntl()咨询锁定。
在“没有时间持续使用 iNotify”的情况下,您到底在做什么?首先,您应该使用IN_CLOSE_WRITE 标志,以便iNotify 在文件写入后关闭时发出一个通知。连续使用它没有任何意义。其次,如果您的时机如此关键,我认为写入文件不是您理想的解决方案。你控制第一个作家吗?在第一个写入器关闭文件后,您是否需要担心其他写入文件的内容?
【讨论】:
lsof 列出打开的文件。 fuser 的工作方式也类似(文件用户),它告诉您哪个用户正在使用该文件。
见:http://www.refining-linux.org/archives/23/16-Introduction-to-lsof-and-fuser/
【讨论】:
在一般情况下,你不能轻易做到这一点,即使你可以,你也不能以不道德的方式使用这些信息(参见 caf 的评论)。
所以我想说,重新设计你的应用程序,这样你就不需要知道了。
【讨论】: