簡體   English   中英

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

[英]How can I tell if a file is open elsewhere in C on Linux?

如何判斷文件是否在C中打開? 我認為更技術性的問題是如何檢索對現有文件的引用數量,並確定是否可以安全打開該信息。

我正在實現的想法是文件隊列。 你轉儲一些文件,我的代碼處理文件。 在生產者關閉文件描述符之前,我不想開始處理。

一切都在linux中完成。

謝謝,陳茲

挖掘這些信息是很多工作(你必須搜索thorugh / proc / * / fd你最好用以下任何一個:

  • 保存到臨時然后重命名。 將文件寫入臨時文件名或目錄,當您完成寫入后,將其重命名為應用程序讀取它們的目錄。 重命名是原子的,所以當文件存在時你知道它是安全的。
  • 也許是上面的變體,當你完成foo文件的編寫時,你會創建一個名為foo.finished的空文件。 在處理文件時,您會查找* .finished的存在。
  • 在寫入時鎖定文件,這樣讀取文件就會阻塞,直到作者解鎖它。 看到flock / lockf函數,它們是咨詢鎖,所以讀者和作者都必須鎖定並尊重鎖。

我不認為在純C中有任何方法可以做到這一點(它不會是跨平台的)。

如果您提前知道正在使用哪些文件,則可以使用inotify在打開時收到通知。

C具有處理文件的功能,但對於獲取有關它們的信息並不多。 在便攜式C中,您唯一能做的就是嘗試以所需的方式打開文件,看看它是否有效。

通常你不能出於variuos的原因(例如,你不能說文件是否與其他用戶一起打開)。

如果你可以控制打開文件的進程,你試圖通過鎖定文件來避免沖突(linux上有很多庫就可以了)

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

如果你同時控制生產者和消費者,你可以使用flock()的lockf()來鎖定文件。

在大多數發行版上都有lsof命令,它顯示了所有當前打開的文件,如果你的文件在同一個目錄中或者有一些可識別的名稱模式,你可以使用grep它的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM