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/perluse strict;use warnings;use Fcntl;use IO::Handle;my $fn = "test.txt";my $newfn = "tmp.$$";my $data = "test.$$";open my $fh, '>', $newfnor 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, $fnor die "failed to rename $newfn to $fn:$!";sync_dir('.');sub sync_dir {my $dir = shift;sysopen my $d, $dir, O_RDONLYor 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:$!";}