如何判断文件是否在Linux上的其他位置打开?

时间:2009-07-06 14:13:04

标签: c linux file-io

如何判断文件是否在C中打开?我认为更技术性的问题是如何检索现有文件的引用数量,并确定是否可以安全打开该信息。

我正在实现的想法是文件队列。你转储一些文件,我的代码处理文件。我不想在生产者关闭文件描述符之前开始处理。

一切都在linux中完成。

谢谢, Chenz

7 个答案:

答案 0 :(得分:5)

挖掘信息是很多工作(你必须搜索thorugh / proc / * / fd 你可以选择以下任何一个方式:

  • 保存到临时,然后重命名。将文件写入临时文件名或目录,当您完成写入后,将其重命名为应用程序读取它们的目录。重命名是原子的,所以当文件存在时,你知道它是安全的。
  • 也许是上述的变体,当您完成文件 foo 的编写后,您将创建一个名为 foo.finished 的空文件。在处理文件时,您会查找* .finished的存在。
  • 在写入时锁定文件,这样读取文件就会阻塞,直到作者解锁它。查看 flock / lockf 函数,它们是咨询锁,因此读者和作者都必须锁定并尊重锁。

答案 1 :(得分:3)

我认为在纯C中没有任何办法可以做到这一点(它不会是跨平台的)。

如果您提前知道自己正在使用哪些文件,则可以在inotify打开时收到通知。

答案 2 :(得分:0)

C具有处理文件的功能,但对于获取有关它们的信息并不多。在便携式C中,您唯一能做的就是尝试以所需的方式打开文件,看它是否有效。

答案 3 :(得分:0)

由于各种原因,

通常你不能这样做(例如,你不能说这个文件是否是由另一个用户打开的)。

如果你可以控制打开文件的进程,你试图通过锁定文件来避免冲突(linux上有很多库就可以了)

答案 4 :(得分:0)

使用lsof命令。 (列出打开的文件)。

答案 5 :(得分:0)

如果您同时控制生产者和消费者,可以使用flock()的lockf()来锁定文件。

答案 6 :(得分:0)

在大多数发行版上都有lsof命令,它显示所有当前打开的文件,如果你的文件在同一个目录中或者有一些可识别的名称模式,你可以使用grep它的输出。