http://codetter.com/?tag=umaemong 氏のから。
安全なファイル書き換えにはディレクトリも fsync すべき。だけど Perl でどう書くか – kazuhoのメモ置き場
http://d.hatena.ne.jp/kazuhooku/20100202/1265106190
Perl Hackers Hub:第6回 UNIXプログラミングの勘所(4)|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/perl-hackers-hub/000604
上記のを写経&動くように。or die の前のセミコロンいらないよね。
http://codetter.com/?tag=umaemong 氏のから。
安全なファイル書き換えにはディレクトリも fsync すべき。だけど Perl でどう書くか – kazuhoのメモ置き場
http://d.hatena.ne.jp/kazuhooku/20100202/1265106190
Perl Hackers Hub:第6回 UNIXプログラミングの勘所(4)|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/perl-hackers-hub/000604
上記のを写経&動くように。or die の前のセミコロンいらないよね。
#!/usr/bin/perl use strict; use warnings; use Fcntl; use IO::Handle; my $fn = "test.txt"; my $newfn = "tmp.$$"; my $data = "test.$$"; open my $fh, '>', $newfn or die "failed to open file:$newfn:$!"; print $fh $data; IO::Handle::flush($fh) or die "flush failed:$!"; IO::Handle::sync($fh) or die "fsync failed:$!"; close $fh; if (-f $fn) { unlink "$fn~" if -f "$fn~"; link $fn, "$fn~" or die "failed to link $fn to $fn~:$!"; } rename $newfn, $fn or die "failed to rename $newfn to $fn:$!"; sync_dir('.'); sub sync_dir { my $dir = shift; sysopen my $d, $dir, O_RDONLY or die "failed to open directory:$dir:$!"; open my $d2, '>&', fileno($d) or die "dup(2) failed:$!"; IO::Handle::sync($d2) or die "fsync(2) failed:$!"; }