如何检测到没有人在 Linux 中写入文件?

Posted

技术标签:

【中文标题】如何检测到没有人在 Linux 中写入文件?【英文标题】:How to detect that no one is writing to a file in Linux? 【发布时间】:2011-01-04 20:07:44 【问题描述】:

我想知道,有没有一种简单的方法来判断另一个实体是否打开了某个文件以供写入?我没有时间连续使用 iNotify 来等待任何当前作家完成写作。我需要进行间歇性检查。 谢谢。

【问题讨论】:

有帮助吗:cboard.cprogramming.com/c-programming/… 您不能真正以非正常的方式使用此信息 - 即使某些函数告诉您该文件当前没有被写入,该信息可能已经过时了你的过程对它起作用的时间。如果您控制这两个进程,请使用fcntl()咨询锁定。 【参考方案1】:

在“没有时间持续使用 iNotify”的情况下,您到底在做什么?首先,您应该使用IN_CLOSE_WRITE 标志,以便iNotify 在文件写入后关闭时发出一个通知。连续使用它没有任何意义。其次,如果您的时机如此关键,我认为写入文件不是您理想的解决方案。你控制第一个作家吗?在第一个写入器关闭文件后,您是否需要担心其他写入文件的内容?

【讨论】:

【参考方案2】:

lsof 列出打开的文件。 fuser 的工作方式也类似(文件用户),它告诉您哪个用户正在使用该文件。

见:http://www.refining-linux.org/archives/23/16-Introduction-to-lsof-and-fuser/

【讨论】:

确实如此,但我希望以编程方式进行。要使用 lsof 我必须调用 system() 等,这将花费太长时间。【参考方案3】:

由于您似乎想要使用库风格的界面,而不是系统,请参阅ofl-lib.c。 (实际上只是从 ofl 程序本身中删除了除 main 函数之外的所有内容。)

【讨论】:

【参考方案4】:

在一般情况下,你不能轻易做到这一点,即使你可以,你也不能以不道德的方式使用这些信息(参见 caf 的评论)。

所以我想说,重新设计你的应用程序,这样你就不需要知道了。

【讨论】:

以上是关于如何检测到没有人在 Linux 中写入文件?的主要内容,如果未能解决你的问题,请参考以下文章

将文本行写入R中的文件

将文本行写入R中的文件

在linux中给一个文本文件写内容的方法(三种)

如何用fortran 在文本文件最后写入内容

C语言如何写入文本文件

Linux如何在一个文件中写入内容