2013-11-26 27 views
2

希望這是一個快速的問題,有人可以指出我的方向是正確的。在Perl中有一種方法可以判斷一個perl進程是否在使用特定的文件

背景信息: 我有一個perl腳本轉換爲在Windows中運行的exe文件。 script.exe讀取並且將不時更新到/從配置文件config.ini Script.exe或者使用line arg指定config.ini文件的位置 執行,或者它可以與out line arg一起運行並將默認爲config.ini文件的默認位置

目標: 防止使用相同的config.ini文件多次執行script.exe。

任何建議或提示將不勝感激。

由於在配置文件

MM

+0

我看錯了,還是你只是在尋找'flock'? – ikegami

+0

窗口下有'flock'工作嗎? –

+0

@mpapec,是的,雖然它創建了強制性鎖而不是諮詢鎖 – ikegami

回答

2

使用flock

use Fcntl qw(LOCK_EX LOCK_NB); 

open(my $config_fh, '<', $config_qfn) 
    or die("Can't open config file \"$config_qfn\": $!\n"); 

if (!flock($config_fh, LOCK_EX | LOCK_NB)) { 
    if ($!{EWOULDBLOCK}) { 
     die("Config file $config_qfn already in use\n"); 
    } 

    die("Error trying to lock the config file: $!\n"); 
} 

... # Rest of program. Don't close $config_fh 
+0

他想阻止多個PID使用相同的配置,所以LOCK_EX看起來是正確的選擇。 –

+0

@mpapec,Herp derp。固定。 – ikegami

+0

你能否提供一些'EWOULDBLOCK'的文檔? –

相關問題