c - 我如何判断文件是否在 Linux 的 C 中的其他地方打开?

标签 c linux file-io

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

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

一切都在 linux 中完成。

谢谢, 陈子

最佳答案

挖掘该信息需要大量工作(您必须搜索整个/proc/*/fd 你最好选择以下任何一种:

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

关于c - 我如何判断文件是否在 Linux 的 C 中的其他地方打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1087204/

相关文章:

c - 我的递归函数有问题

c - 具有两个可执行文件的递归生成文件

linux - 汇编中长值列表的最大值

c++ - 你能帮我清除这个错误吗

c# - 如何获取用户文档目录的位置?

我们可以将负数的整数分配给无符号整数吗?

C While 段错误

未找到 PHP fatal error 类

linux - html2文本 : convert special characters

java - 按下按钮并在java中的新窗口中打开文件