Perlについての質問箱 11箱目
■ このスレッドは過去ログ倉庫に格納されています
0079デフォルトの名無しさん
NGNGuse POSIX;
use Fcntl qw/:flock/;
open my $fh, "+< $file" or die $!;
flock $fh, LOCK_EX;
my @data = <$fh>;
# @dataの内容を加工
truncate $fh, 0;
seek $fh, 0, SEEK_SET;
print $fh @data;
close $fh;
という方法だと、truncate〜printの間にシグナルなどで死んだ時に
データが消えてしまいます。(実際にありました。)
そこで次のように変えることで、自分では対処できたと思っているのですが、
何か見落としなどはありますでしょうか?(今のところ正常に動いてはいます。)
use File::Temp qw/tempfile/;
# use POSIX〜@dataの加工まで同じ
my ($tfh, $tfile) = tempfile(DIR=>$tmpdir);
print $tfh @data;
close $tfh;
rename $tfile=>$file;
close $fh;
■ このスレッドは過去ログ倉庫に格納されています