2011-01-09 75 views
3


我有一個寫入文件的函數,如何使用另一個腳本檢查文件是用於寫入還是已關閉?如何知道文件是否仍然可以寫入

編輯:這個文件可能被其他腳本/應用/系統寫打開......

謝謝。

+0

看看flock示例:http://www.tuxradar.com/practicalphp/8/11/0 – 2011-01-09 16:01:42

回答

2

您應該在兩個腳本中使用flock。這會在文件上放置一個標誌,以便通知其他腳本文件正在使用中。該標誌有意使用fclose或在腳本末尾隱式關閉。

+0

雖然flock是答案(或`dio_fcntl`),flock只提供一個*諮詢*鎖定。你必須在任何地方與羊羣協調**。任何其他不使用flock的腳本都可以隨時操作該文件。 – jasonbar 2011-01-09 16:06:18

+0

@jasonbar因此通過「在兩個腳本」。在您的第一條評論之後,我已經更新了我的答案,以反映您的出色觀點。 – lonesomeday 2011-01-09 16:07:06

-3

我想說的只是使用文件打開功能,如果它返回false,那麼文件顯然仍然是打開的。

+2

您可以根據需要隨意調用同一文件中的fopen()多次, 。 – jasonbar 2011-01-09 16:06:58

1

如果您使用的是Unix,您的系統可能安裝了lsof(「LiSt打開文件」)命令。 輸出中的「FD」列指示文件是打開讀取, 寫入,還是兩者都打開。

我想指出,任何形式的「檢查,看看文件X是否開放的寫作過程,如果是這樣做......」的過程是受競爭條件。一些其他進程 可能會在檢查完成後,但在操作開始之前打開文件。

相關問題