如何判断一个文件是否在 C 中打开?我认为更技术性的问题是如何检索对现有文件的引用数量,并根据该信息确定打开文件是否安全。
我正在实现的想法是一个文件队列。你转储一些文件,我的代码处理这些文件。在生产者关闭文件描述符之前,我不想开始处理。
一切都在 linux 中完成。
谢谢, 陈子
最佳答案
挖掘该信息需要大量工作(您必须搜索整个/proc/*/fd 你最好选择以下任何一种:
- 保存到临时文件然后重命名。将文件写入临时文件名或目录,完成写入后,将其重命名为应用程序读取它们的目录。重命名是原子操作,因此当文件存在时,您知道它可以安全读取。
- 可能是上面的一个变体,当您完成文件 foo 的编写时,您会创建一个名为 foo.finished 的空文件。您在处理文件时寻找 *.finished 的存在。
- 在写入时锁定文件,这样读取文件就会阻塞,直到写入者解锁它。查看 flock/lockf 函数,尽管它们是建议性锁,因此读者和作者都必须锁定,并尊重这些锁。
关于c - 我如何判断文件是否在 Linux 的 C 中的其他地方打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1087204/