背景资料:
我有一个 Perl 脚本转换为在 Windows 上运行的 EXE 文件 script.exe。Script.exe 有时会从配置文件config.ini读取和更新。
Script.exe 使用指定config.ini文件位置的命令行参数执行。或者它可以在没有命令行参数的情况下运行,并将默认为config.ini文件的默认位置。
目标:
防止使用同一个config.ini文件多次执行 script.exe 。
我怎样才能做到这一点?
背景资料:
我有一个 Perl 脚本转换为在 Windows 上运行的 EXE 文件 script.exe。Script.exe 有时会从配置文件config.ini读取和更新。
Script.exe 使用指定config.ini文件位置的命令行参数执行。或者它可以在没有命令行参数的情况下运行,并将默认为config.ini文件的默认位置。
目标:
防止使用同一个config.ini文件多次执行 script.exe 。
我怎样才能做到这一点?
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