一尘不染

如何确定Linux上C的其他位置是否打开了文件?

linux

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

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

一切都在linux中完成。

谢谢,Chenz


阅读 314

收藏
2020-06-07

共1个答案

一尘不染

挖掘信息是一项繁重的工作(您必须搜索/ proc / * / fd,而使用以下任何一种方法都会更好:

  • 保存到临时,然后重命名。将文件写入临时文件名或目录,完成写入后,将其重命名为应用程序读取文件的目录。重命名是原子的,因此当文件存在时,您便知道可以安全读取。
  • 也许是上述方法的一种变体,当您完成文件 foo的 写入后,您将创建一个名为 foo.finished 的空文件。您在处理文件时寻找* .finished的存在。
  • 写入时锁定文件,这样读取文件将一直阻塞,直到写入者将其解锁为止。请参阅 flock / lockf 函数,尽管它们是建议性的锁定,所以读取器和写入器都必须锁定并遵守这些锁定。
2020-06-07