当前位置: 首页 > 面试题库 >

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

咸晨
2023-03-14
问题内容

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

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

一切都在linux中完成。

谢谢,Chenz


问题答案:

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

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


 类似资料:
  • 问题内容: 我最喜欢的Linux工具之一是lsof-真正的瑞士军刀! 今天,我发现自己想知道WinXP系统上的哪些程序打开了特定文件。有与lsof等效的工具吗?此外,有问题的文件是通过网络共享进行的,因此我不确定是否会使问题复杂化。 问题答案: 使用Sysinternals Suite中的Process Explorer,Find Handle或DLL函数将让您搜索打开该文件的过程。

  • 问题内容: 当我输入时,它给出以下输出。 从中我如何知道给定的操作系统是32位还是64位? 这在编写脚本时非常有用,例如:我要为哪种体系结构构建? 问题答案: 尝试。缺少它并输出: 否则,请键入以下内容 ,而不是Linux内核,而是CPU : 要么: 在“标志”参数下,您将看到各种值:请参阅“ / proc / cpuinfo中的标志是什么意思? ”其中一个名为:(x86-64:amd64,也称为

  • 但这似乎没有任何选择来给我想要的信息。

  • 问题内容: 我下面的代码创建一个新数组,并将其发送到chat(jFrame)。 但是我需要修改此代码以使其工作,如果打开了聊天jframe,则不要打开新的jFrame。而是在chat jframe中打开新的选项卡。聊天框的代码是: 问题答案: 我想知道如果该窗口依赖于另一个窗口,那么是否不应该使用JDialogs而不是JFrames。 一种解决方案是使用类字段来保存对窗口(JFrame或JDial

  • 问题内容: 我使用64位整数内的位存储标志。 我想知道是否有单个位设置了64位整数中的任何位置(我不在乎任何特定位的位置)。 我可以使用 Bit Twiddling Hacks (由Sean Eron Anderson 撰写) 来计数位数,但是我想知道什么是最有效的方法来检测是否设置了一位。 以及一些维基百科页面: 找到第一个 位操作 汉明重量 注意:我的应用程序是用Java编写的,但是我对使用其

  • 我想知道是否有一种方法可以确定在数据库上启用了PostGis。 我试图用我的开发机器复制我的正式服,我不确定我的开发机器上的数据库是否启用了PostGIS或postgis_topology或两者兼而有之。 我试着四处寻找解决方案,但什么也想不出。 这方面的任何建议都会有帮助。