[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 00:43 / Filesize : 262 KB / Number-of Response : 974
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【Perl】ファイルロック(排他処理)について語ろう



1 名前:nobodyさん [02/06/23 10:18 ID:eY2l+Gw1]
どんな環境でも使えて、軽くて、頑丈なロックを考えようじゃありません

374 名前:nobodyさん mailto:sage [03/04/22 20:41 ID:???]
妥協しないぐらい食材にこだわって、実は化学調味料ドバドバ入れちゃうみたいな?

375 名前:っていうか mailto:sage [03/04/24 13:03 ID:???]
別ファイルに書き込んで mv
これ定説

376 名前:山崎渉 mailto:(^^) [03/05/22 02:08 ID:???]
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―

377 名前:nobodyさん mailto:sage [03/05/22 07:17 ID:???]
厨房な質問で悪いんですが、mkdirを使ったファイルロックってこういうことですか?

if (opendir(LOCK, "lock")) {
  closedir(LOCK);

  rmdir("lock");

  # 処理

  mkdir("lock");
}

378 名前:nobodyさん [03/05/22 09:34 ID:sAd9/kNT]
mkdir("lock")
じゃなくて
mkdir("lock", 600)
でした。

379 名前:nobodyさん mailto:sage [03/05/22 10:08 ID:???]
>>378
違う。
if (mkdir ("lock", 755)) {
  (処理)
}

こう。
mkdirは、ディレクトリの作成に成功すると真が、
失敗すると偽が返ってくる。


380 名前:nobodyさん [03/05/22 13:35 ID:2b2Zl4vP]
>>379
?それだけでいいんでふか?

381 名前:nobodyさん mailto:a [03/05/22 13:46 ID:???]
20代OLです毎日上司のセクハラや通勤電車での痴漢でストレスがたまっていた
そのときにネットで見つけたアダルトDVDショップ以前からオナニー用にDVD
が欲しかったのですぐ注文しました、とても安くてびっくりしましたが次の日には
もう届きました私が買ったのは、オナニー、レズ、レイプです毎日オナニーしてま
す。
www.net-de-dvd.com/


382 名前:nobodyさん mailto:sage [03/05/22 13:53 ID:???]
>>380
ttp://homepage1.nifty.com/glass/tom_neko/web/web_04.html
このへんでも参考に



383 名前:380 じゃないけど mailto:sage [03/05/22 15:06 ID:???]
>>382
激しく参考になりますた。謝謝。

ところで
flock() が使えないところで

eval{ if(!(flock(FH, 2))){ &function; } };

とした場合ちゃんとサブルチンに逝ってくれますか?
false は返ってくるんでしょうか?


384 名前:nobodyさん [03/05/22 15:40 ID:Mzhw6+0o]
>>382
サンクスコ(・∀・)

385 名前:nobodyさん [03/05/23 13:24 ID:ORCLTuvq]
ロックする時にmkdirでディレクトリを作って、
アンロックする時にrmdirでディレクトリ削除ってことですよね?

>>382のサイト見てないけど…。

386 名前:nobodyさん mailto:sage [03/05/23 13:28 ID:???]
>>385
見ろ。

387 名前:山崎渉 mailto:(^^) [03/05/28 17:07 ID:???]
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

388 名前:nobodyさん mailto:hage [03/05/28 18:03 ID:???]
age

389 名前:nobodyさん [03/05/31 21:04 ID:n0OtuFEQ]
ロックされてるかどうか調べるにはどうしたらいい?
他のプロセスでロックしてるファイルにアクセスしてもロックがすぐ終っちゃうような…。

どうすれバインダー。

390 名前:動画直リン [03/05/31 21:10 ID:1EAhrEiJ]
homepage.mac.com/hitomi18/

391 名前:nobodyさん mailto:sage [03/05/31 21:44 ID:???]
>>389
激しくロックの方法に依ると思うんだが。

392 名前:389 [03/05/31 21:45 ID:n0OtuFEQ]
全般的にできるのはないの?



393 名前:nobodyさん [03/05/31 22:08 ID:nC5SP5sD]
>>392
ロック中に
sleep 60;


394 名前:nobodyさん mailto:sage [03/05/31 23:30 ID:???]
弱いかな?
package FileLock;
use IO::File;
my $CAT= '/bin/cat';
sub open_w {
my $filename= shift;
mkdir($filename)unless -d $filename;
my $base= sprintf("%s.%s.",time,$$);
my $cnt= 0;
$cnt++ while(-f "$filename/$base$cnt");
return IO::File->new("$filename/$base$cnt",'>>');
}
sub open_r {
my $filename= shift;
return IO::File->new("|$CAT $filename/*");
}
1;


395 名前:nobodyさん [03/06/01 04:57 ID:Hll/ZLYf]
>>393
おぉ!蟻がとう。

396 名前:nobodyさん mailto:sage [03/06/01 12:29 ID:???]
>>393
禿げ藁

397 名前:nobodyさん mailto:sage [03/06/01 13:22 ID:???]
>>394
駄目ロック。これ使うならロックしなくていい。

398 名前:nobodyさん mailto:sage [03/06/01 21:54 ID:???]
アンケートみたいに読み出しが少なくて、書き込みが多いときに
flockと組み合わせて(かつcron回してファイルをまとめつつ)
使ってたんだけど。。。駄目かぁ(´Д`;)


399 名前:nobodyさん mailto:sage [03/06/02 00:36 ID:???]
>>398
> mkdir($filename)unless -d $filename;
意味なし。複数のプロセスでunless -d $filenameが成立する可能性がある。
排他制御するにはアトミックにやらないと駄目。

排他制御に強い/弱いは無い。正しいか駄目のどちらか一方、わずかでも可能性があれば駄目ロック。

400 名前:nobodyさん [03/06/02 09:59 ID:7y9vki3n]
そういえばみんななんで、
--$retry <= 0
なんてやってるの?
$retry--
じゃまずいの?

401 名前:nobodyさん [03/06/02 10:09 ID:Ixodm31c]
みてね♪
www1.free-city.net/home/s-rf9/page006.html

402 名前:nobodyさん [03/06/02 10:20 ID:sw1UrgM5]
               ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
              ( ´∀`)/< 先生もろDVDはどこですか?
           _ / /   /   \___________
          \⊂ノ ̄ ̄ ̄ ̄\
           ||\        \
           ||\|| ̄ ̄ ̄ ̄ ̄||                
           ||  || ̄ ̄ ̄ ̄ ̄||         ∧_∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  
              .||          ||         (´Д` )  <  www.dvd01.hamstar.jp だ!
                              /   \   \___________
                              ||  ||  
                              ||  ||
                         __ //_ //___
                        /  //  //      /
                       /    ̄     ̄      //
                       || ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||  ||
                       || ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||  ||
                       ||    教卓         ||  ||
                       ||                ||






403 名前:nobodyさん mailto:sage [03/06/02 10:29 ID:???]
>>400
デクリメントの事言ってるのか?
前置きと、後置きでは、動作が違う。
そして、スレ違い。


404 名前:nobodyさん [03/06/02 10:35 ID:azLkJHuz]
>>403
いやいや、なんで<=を使ってるかが知りたいの?
ifって偽だと実行しないでしょ?
$retryは最終的に0になるわけだから、<=は必要ないだろ。

ってかスレ違いって分かってるので、逝ってきます。

405 名前:nobodyさん [03/06/02 10:39 ID:7y9vki3n]
良く見たら答えが分かった。馬鹿か俺。

やっぱり逝くしかないな…。

406 名前:直リン [03/06/02 11:10 ID:mGHfwiJV]
homepage.mac.com/yuuka20/

407 名前:nobodyさん mailto:sage [03/06/02 11:20 ID:???]
>>404-405
0は偽だが、-1は真になる。

上げてる時点で逝ってください( ̄人 ̄)


408 名前:nobodyさん mailto:sage [03/06/02 11:42 ID:???]
>>407
でも絶対-1にはならなくない?

まだ逝ってないよ、俺。

409 名前:nobodyさん mailto:sage [03/06/02 12:07 ID:???]
>>408
いや・・・だからさ・・・
全体のソース読んでないんで分からないんだけど。
マイナスになる可能性があるかもしれないんでしょ?

--$retry <= 0

この条件だと、$retryがもし0だったら・・・
-1 <= 0
こんな判定になるし。
0が入る訳がないソースだったとしても、
ちゃんと条件書いてる方が、見た目分かりやすいってのもある。
そして、スレ違いだから、やっぱ逝くべき。


410 名前:nobodyさん mailto:sage [03/06/02 12:14 ID:???]
>>404
> いやいや、なんで<=を使ってるかが知りたいの?
・・・え? 問い掛けられても・・・


411 名前:nobodyさん mailto:sage [03/06/02 12:16 ID:???]
>>408
> でも絶対-1にはならなくない?
お前プログラマに向いてない。確実に-1になる。わかったら逝け、わからなくても逝け。

412 名前:nobodyさん [03/06/02 12:47 ID:YkiHze2n]
>>411
うおっ!キツイ一言だな…。
でもこのスレのヤシらはなんか優しい…。

すっきりしたら逝くから、すっきりさせろYO!

なんで-1になるんだ?
粘着房だな…。



413 名前:nobodyさん mailto:sage [03/06/02 13:02 ID:???]
>>412
だから・・・・

--$retry <= 0

↑これだけ見せられて、-1になるか、ならないかって言われても、
分からない訳なのよ。
どのソースみて、言ってる訳?

とにかく、その一行を見る限りでは、-1になる可能性はある。
何度も言うようにスレ違いだから、優しいうちに逝っとけ。


414 名前:動画直リン [03/06/02 13:10 ID:mGHfwiJV]
homepage.mac.com/hitomi18/

415 名前:nobodyさん mailto:sage [03/06/02 13:14 ID:???]
>>413
そういうことね。
上の方のソースやKENTのソース。

おとなしく逝っときます。
スレ違いのことをしつこくスマンカッタ…。

416 名前:nobodyさん mailto:sage [03/06/02 13:43 ID:???]
Cプログラマ的にはif (--retry)の方が早い気がする。
気がするであって、気にする奴が本当に気にしなきゃいけない場合はアセンブラで書く。

417 名前:_ mailto:sage [03/06/02 14:38 ID:???]
homepage.mac.com/hiroyuki43/moe/jaz01.html

418 名前:_ mailto:sage [03/06/02 16:09 ID:???]
homepage.mac.com/hiroyuki43/moe/jaz01.html

419 名前:_ mailto:sage [03/06/02 19:13 ID:???]
homepage.mac.com/hiroyuki43/hankaku/hankaku07.html

420 名前:nobodyさん mailto:sage [03/06/03 08:26 ID:???]
>>416
おまえも素質ないから早くプログラマから足洗った方がいいぞ。

421 名前:nobodyさん mailto:sage [03/06/17 05:57 ID:???]
search.cpan.org/author/MAKOTO/IO-File-flock-0.07/
これって使っても平気ですか?


422 名前:nobodyさん mailto:sage [03/06/22 16:13 ID:???]
房な質問なんですけど、そんな頻繁にデッドロックって起こるものなんでしょうか?



423 名前:nobodyさん mailto:sage [03/07/07 19:32 ID:???]
10 'ファイルの書き込み
20 Open "Text1.txt" For Output As #1
30 Print #1,"Write file."
40 Close #1

ファイルロックのためのtmpファイル作成しようと思ったんですが、
プログラム内で擬似マルチタスクを作成している時といないときがあるので、
flock関数みたいなものがあれば効率が上がると思うのですが、
やはりrename形の方が安全で軽いのでしょうか?

424 名前:なぞなぞ先生 mailto:sage [03/07/08 06:24 ID:???]
排他処理するために必要な国家資格はなぁんだ?

425 名前:nobodyさん mailto:sage [03/07/08 12:02 ID:???]
情報処理

426 名前:nobodyさん mailto:sage [03/07/08 12:12 ID:???]
>>424
歯科医師

427 名前:nobodyさん mailto:sage [03/07/08 12:19 ID:???]
国家公務員一級


428 名前:nobodyさん mailto:sage [03/07/08 15:54 ID:???]
シスアドだべ。

429 名前:nobodyさん mailto:sage [03/07/08 15:58 ID:???]
公害防止管理者だろ

430 名前:nobodyさん mailto:sage [03/07/09 00:33 ID:???]
>>426
司会者?

431 名前:nobodyさん [03/07/10 16:21 ID:QDkm5VXP]
初心者で申し訳ない。
flock使えるサーバなんだけど、書き込み中はロックするっていう
対象のファイルをflockの引数にするのと、別のダミーファイルを
flockの引数にするのとあるでしょ。どっちがいいのでつか。




432 名前:nobodyさん mailto:sage [03/07/10 17:46 ID:???]
場合によるっしょ。
処理全体にかけたいなら後者の方が良いかと。



433 名前:nobodyさん mailto:sage [03/07/10 21:42 ID:???]
先生、Webプログラミング界では共有ロックが理解されていません

434 名前:431 mailto:sage [03/07/10 22:35 ID:???]
>>432
ありがとん。
>>433
漏れのこと言ってるようでつね。勉強してきまつ。


435 名前:nobodyさん mailto:sage [03/07/11 11:17 ID:???]
そりゃステレオタイプだ

436 名前:nobodyさん mailto:sage [03/07/14 17:20 ID:???]
>>424
おまいいい加減教えろ!

437 名前:なぞなぞ先生 mailto:sage [03/07/15 06:43 ID:???]
OSやSOFTWAREの基本的なことで申し訳ないのですが、
完全に同時にプロセスが発生することはないよね?
マルチタスクってのもマルチスレッドってのも基本的に擬似的に行っているもので、
結局は1つのプロセスが司っている処理って聞いたことがあったような。
そうすると、OSがダウンしない限りrename型の排他処理
rename
open
処理
close
rename
は完璧に有効だと思うんだが。
と思ったけど、それを言い始めたらキリが無いかw

うーん、、、しかしたまに2chで1001を超えるのは何でだろう。
ロック解除してから1001のチェックをしているのかな。。。

最近うなされて困ってます。変な文&長文すまん。

438 名前:nobodyさん mailto:sage [03/07/15 06:44 ID:???]
いかぁん、名前が残ってた!!!

氏のう。。。。

439 名前:山崎 渉 mailto:(^^) [03/07/15 11:08 ID:???]

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

440 名前:nobodyさん mailto:sage [03/07/15 19:03 ID:???]
>>437
レスが1000を超えるのはdatファイルへの書き込みと、
レスポンス数のチェック(書き込み禁止処理)がアトミックにできないから。

実際には、二つの処理に結構な間があると思う。

441 名前:nobodyさん mailto:sage [03/07/15 22:40 ID:???]
              ∩
             | |
       ∧_∧  | |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ( ´ー`)//  < 先生!
      /     /    | アトミックって何ですか?
     / /|    /     \___________
  __| | .|    | __
  \   ̄ ̄ ̄ ̄ ̄   \
  ||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              || 


442 名前:nobodyさん mailto:sage [03/07/15 23:25 ID:???]
表現がおかしい?(慣れない横文字は使うもんじゃないね

他のプロセスが割り込めない極小時間(ワンステップ)で操作。
にしといてくださいな。




443 名前:nobodyさん mailto:sage [03/07/16 07:27 ID:???]
いや、アトミックという言葉は普通に使うと思うぞ
ましてやファイルロックの話題ならなおさら

444 名前:437 mailto:sage [03/07/16 08:09 ID:???]
その件なのですが、1000のカキコをログに書き込んだら、
ファイルロック中に何らかの処理(たとえば別ファイルにHTML書き出しやHTML化待ちDATリストへの追加)
をすれば、"アトミック"は存在しないと思うのですが。

下手な考えスマソ。。。

445 名前:440 mailto:sage [03/07/16 22:09 ID:???]
>>444
ああっと、flockが頭にあったので、、
renameが理想的なロックとして動作するとしたら>>437で可能だと思います。
(OSがlinuxの場合は壊れたりするけど…)

2chとしては、1000で止まらなくても(多少レスが多く付いても)構わないのかも。
(ロックする時間が増える→待ちプロセス数が増える→サーバ負荷が増えるよりは。)

446 名前:437 mailto:sage [03/07/17 00:22 ID:???]
>ロックする時間が増える→待ちプロセス数が増える→サーバ負荷が増える
2chみたいな大規模な掲示板だとここが問題なんですね。
ぐっすり眠れそうな気がしました。レスありがとうございました。

447 名前:nobodyさん mailto:sage [03/07/19 14:28 ID:???]
2ch互換スクリプトの場合、スレ立て処理に問題抱えてる場合があるので注意。
スレッドキー(ファイル名)決定と、ファイル作成(書き込み)を別の場所で
行っている事がほとんどなので、同時にスレ立てが発生するとスレッドが
合体する可能性がある。

半年前あたり2chでもちょっと問題になってた。
実際としては2ch以外で問題になることは無いと思うけどね。

448 名前:nobodyさん mailto:sage [03/07/20 07:55 ID:???]
>>447
スレアドレス決定とファイル作成を同じスクリプトで行えばオッケー?

449 名前:nobodyさん mailto:sage [03/07/20 09:18 ID:???]
>>448
そういうことじゃない。
スクリプトの中でキー決定からファイル作成までの間に
いろいろな処理があって、同時スレ立ての一方がファイル作成前に
もう一方がそのキーのスレがあるか確認して存在しないと
判断してしまう時差の問題が起こりえるということ。

450 名前:nobodyさん [03/07/26 13:13 ID:GHzBAdl/]
flock のロックをしたいんですが、
具体的に何をすれば良いのでしょうか?
flock と言う名前のディレクトリを
作って、ロックしたいファイルに
置いとけば良いのでしょうか?
すいませんが、まるっきりの初心者ですので、
教えて下さい。

451 名前:nobodyさん mailto:sage [03/07/26 13:24 ID:???]
>>450
>>1-449

452 名前:nobodyさん mailto:sage [03/07/26 13:55 ID:???]
>>451
ワロタ!
でも、イイ!



453 名前:_ mailto:sage [03/07/26 13:55 ID:???]
homepage.mac.com/hiroyuki44/

454 名前:nobodyさん mailto:sage [03/07/26 18:00 ID:???]
YOU THE☆ROCKは綴りが違いますが、このスレの親戚ですか?

flockするファイルのあるディレクトリのパーミッションは任意たんでよいですか?
自分の中で最高の条件を満たすレンタル鯖がflock使えないとかなりへこむ。。。
結局rename型のlockにしてみたんだが、鯖の負荷とか考えたくないなぁ。

ブロードバンド回線開通したら絶対鯖立てたい。

と言う独り言でした。また来週。

455 名前:nobodyさん mailto:sage [03/07/26 22:03 ID:???]
やっぱりファイルで何らかのロック処理をした後、
flockも使うのが最強ですかね?

456 名前:nobodyさん mailto:sage [03/07/26 22:40 ID:???]
じっさまなら誰もおこらねぇけど、

457 名前:nobodyさん mailto:sage [03/07/27 01:31 ID:???]
>>455
ハァ、Webプログラマーってどうして馬鹿ばっか集まるんだ。
排他制御に強い/弱いはない。正しい/駄目のどちらかだ。
駄目なものをいくつ重ねても駄目なものは駄目。正しい方法を複数使う必要はない。

458 名前:nobodyさん mailto:sage [03/07/27 03:14 ID:???]
結論が出てしまったな・・・

459 名前:nobodyさん mailto:sage [03/07/27 09:30 ID:???]
ドコ━━━(゚Д゚≡(゚Д゚≡゚Д゚)≡゚Д゚)━━━━!!!!???

460 名前:nobodyさん mailto:sage [03/07/27 20:51 ID:???]
Iriaにセキュリティーホールらしいぞ。
tv3.2ch.net/test/read.cgi/geino/1050253651/377


461 名前:nobodyさん mailto:sage [03/08/04 22:07 ID:???]
今の今までflockできないとおもってたが、パーミッション777で解決しちった。

462 名前:nobodyさん [03/08/06 01:55 ID:pOGj2Sy2]
てす



463 名前:nobodyさん [03/08/06 01:56 ID:pOGj2Sy2]
てすてす

464 名前:nobodyさん [03/08/06 01:56 ID:pOGj2Sy2]


465 名前:nobodyさん [03/08/07 14:03 ID:fxtSTKIN]
ちょっと思った。
use Fcntl;
をしといて、
sysopen
を使ってLOCK_EXとか呼べないかな。

466 名前:nobodyさん mailto:sage [03/08/07 14:18 ID:???]
意味不明。
LOCK_EXは定数(を返すだけのsub)

467 名前:nobodyさん mailto:sage [03/08/07 15:00 ID:???]
use Fcntl;
sysopen FILE,"hoge",O_RDWR|O_CREAT|LOCK_EX;
みたいなことできるかってこと?
試してみてね。
俺は知らん。

468 名前:nobodyさん mailto:sage [03/08/08 01:36 ID:???]
>>465
use Fcntl;するならO_SHLOCKとO_EXLOCKが使えるでしょ。
Win系はシラネ。

469 名前:nobodyさん mailto:sage [03/08/08 04:05 ID:???]
>>465
うん、使える。
O_EXLOCKを使ってsysopenで書いてあげたら
もっとスマートなlockができそう。

470 名前:nobodyさん mailto:sage [03/08/09 22:15 ID:???]
>>465
use IO::File::fock;
my $fh = new IO::File::fock('file','>>');


471 名前:山崎 渉 mailto:(^^) [03/08/15 22:42 ID:???]
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

472 名前:nobodyさん mailto:sage [03/08/24 11:20 ID:???]
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;




473 名前:472 [03/08/24 11:25 ID:xfHM1yWk]
あ、よく考えたら、既存の行をいちいち@valuesにする必要はないんだ・・・
訂正。
↓これでどうでしょか?

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>){
                print TMP $line ;
            }
            print TMP "新しい行" . "\n";
        close TMP;
    close IN;
    unlink $datafile;
    rename ($tmpfile, $datafile) or die ("cannot rename : $!");
close LOCKF;



474 名前:472 [03/08/24 11:57 ID:xfHM1yWk]
あるいはもう1つの選択枝。
単純に、

use Fcntl qw(:flock);
open(OUT, "+< $datafile");
    flock (LOCKF, LOCK_EX);
        truncate(OUT, 0);          # ファイルサイズを0バイトにする
        seek(OUT, 0, 0);            # ファイルポインタを先頭にセット
        print OUT "新しい行" . "\n";;  # 書き込む
close(OUT);                     # closeすれば自動でロック解除

・・・・どっちがいいのでしょうか・・・?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<262KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef