【Perl】ファイルロック(排他処理)について語ろうat PHP【Perl】ファイルロック(排他処理)について語ろう - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト471:山崎 渉 03/08/15 22:42 (⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン 472:nobodyさん 03/08/24 11:20 flock使えます。 追記の場合って、どうするのが一番確実で負荷がかかんないんでしょうか? 僕は、データを編集する場合と同じように、以下のようにしちゃってますが。use Fcntl qw(:flock); #万が一リネーム失敗したときのために、ユニークなファイル名にしておく $tmpfile = "$datafile".".$$.". time() .".csv"; #ロックファイルを作成する(★注:ロックファイルは、各CSVごとにユニークに) open (LOCKF, ">$datafile"."_lockf") or die("cannot open:$!"); flock (LOCKF, LOCK_EX); #ロックファイルをflockする open(IN, "< $datafile") or die("cannot open:$!"); # 読みのみモードで開く open(TMP,"> $tmpfile"); #テンポラリファイルを作成 while ($line = <IN>){ $line .= <IN> while ($line =~ tr/"// % 2 and !eof(IN)); $line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/; @values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_} ($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g); #必要なものだけをEUCにして、出力時にSJISにする foreach $value (@values){ &jcode::convert(\$value, "euc"); }; #CSV形式に変換 $newline = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @values; print TMP "$newline\n" ;#テンポラリファイルに1レコード書き込み } print TMP "新しい行" . "\n"; close TMP; close IN; unlink $datafile; rename ($tmpfile, $datafile) or die ("cannot rename : $!"); close LOCKF; 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch