[表示 : 全て 最新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]
どんな環境でも使えて、軽くて、頑丈なロックを考えようじゃありません

696 名前:nobodyさん mailto:sage [04/05/20 22:40 ID:???]
>>694
単に、書き込みが100%重複しない論理空間を仮定すれば、というだけの話でしょ。
もちろん現実にそんなことはありえないと暗示しているわけで。

697 名前:685 mailto:sage [04/05/21 01:02 ID:???]
皆様回答ありがとうございます。

>>693
という事は書き込みが重複しないなら、
ファイルロックで防げる程度のトラブルは防げるという事ですね。

>>694
書き込み処理を行えるのがパスワードを知っている1人なのです。
パスワードが他人に漏れず、その1人が同時に操作せず、
openしたまま処理が中断することもない・・・
という仮定はありますが。

ファルイロックの基本的な知識さえない私に丁寧な回答ありがとうございました。

698 名前:nobodyさん mailto:sage [04/05/27 13:48 ID:???]
やっと最近になってきっちりしたファイルロックのコード書けるようになった。

けっこうウソ書いてあるサイトが多いのに驚いた。

699 名前:nobodyさん mailto:sage [04/05/27 17:15 ID:???]
>>698
そういうサイトもきっちり書けていると思ってんだろ。
お前と同じように。

700 名前:nobodyさん mailto:sage [04/05/27 20:14 ID:???]
きっちり書けるようになったと自分で思い込むのは勝手だが、他人には言うな。

701 名前:nobodyさん mailto:sage [04/05/27 21:10 ID:???]
どうキッチリ書いたか教えて欲しい

702 名前:nobodyさん mailto:sage [04/05/27 21:08 ID:???]
どう書いたか教えて欲しい

703 名前:nobodyさん mailto:期待上げ [04/05/28 01:38 ID:???]
うん
見せてよ

704 名前:698 mailto:sage [04/05/28 11:16 ID:???]
わたしは秘密主義なんで弟子にも教えることはない。

自分で掴み取れ!  これに尽きるな



705 名前:nobodyさん mailto:sage [04/05/28 15:29 ID:???]
ふっ。これで糞コード蔓延の芽がまた一つ摘み取られた。良かった良かった。

706 名前:nobodyさん mailto:sage [04/05/30 14:43 ID:???]
ファイルロックなんかしなくったって、めっちゃ速く処理してしまえばええやん

707 名前:nobodyさん mailto:sage [04/05/30 14:44 ID:???]
>>706

すげー!! それだっ!

708 名前:nobodyさん mailto:age [04/05/30 18:12 ID:???]
ファイルロックなんかしなくったって、誰もアクセスしなければええやん


709 名前:nobodyさん mailto:sage [04/05/30 22:14 ID:???]
windowsならmutexを使う手があるよん。名前にファイルパス(\は/に置き換えたやつ)
を使う。速いしいいぞ。


710 名前:709 mailto:sage [04/05/30 22:16 ID:???]
はっ、ここはPerlの板だった。
xs使って作るしか、、、。


711 名前:nobodyさん mailto:sage [04/05/30 22:23 ID:???]
>>709 Win32::Mutex
search.cpan.org/~gsar/libwin32-0.191/

712 名前:nobodyさん mailto:sage [04/05/31 00:08 ID:???]
おお、あるんだ。
他のOSとかもないのかな。
lock::mutexとかいう一本にまとめて使えるようなライブラリがいいなぁ。
mutexもセマフォも使えないけどflockは使えるOSだったら、
内部実装はflockでやるとか。


713 名前:357 mailto:sage [04/05/31 20:57 ID:???]
flock使えない機種でmutexを使ってflock模擬したほうがいいか。


714 名前:713 mailto:sage [04/05/31 22:53 ID:???]
うわ、名前間違えた。



715 名前:nobodyさん mailto:age [04/10/09 22:28:45 ID:???]
ダレモイナィ
タアソウスルナラ イマノウチ

716 名前:nobodyさん mailto:sage [04/10/09 23:12:22 ID:???]
open(LOCK, ">lock.tmp");
flock(LOCK,2);
open (IN, "count.dat");
$count=<IN>;
close(IN);
$count=$count++;
open (OUT, ">count.tmp");
print OUT $count;
close(OUT);
rename("count.tmp","count.dat");
unlink("lock.tmp");
flock(LOCK,8);
close(LOCK);

これでOK?

717 名前:nobodyさん mailto:sage [04/10/10 04:46:13 ID:???]
萌えは初心者だから良くわからないけど、
$count=$count++;

$count++;
でいいと思うけど。

718 名前:nobodyさん mailto:sage [04/10/10 16:53:04 ID:???]
>>716
いいえNG

719 名前:716 mailto:sage [04/10/10 16:59:43 ID:???]
>>718
どこら辺がNG?

720 名前:nobodyさん mailto:sage [04/10/10 17:10:11 ID:???]
無駄なことをやってるだけだろ

open (IN, "count.dat");
flock(IN,2);
$count=<IN>;
$count++;
print IN $count;
close(IN);

これでいいじゃん

721 名前:716 mailto:sage [04/10/10 17:16:22 ID:???]
えっ?それじゃ書き込めないのでは?

722 名前:nobodyさん mailto:sage [04/10/10 17:19:40 ID:???]
すまん

open (IN, "+>count.dat");

723 名前:716 mailto:sage [04/10/10 17:36:23 ID:???]
カウンタだとそれでいいけど、掲示板など複数のファイルを弄る場合にはロック用のファイルが必要になるよね?

724 名前:nobodyさん mailto:sage [04/10/10 17:43:35 ID:???]
>>723
そんなのは一概には言えない。
各ファイルは読み込み・書き込み・両方のいずれなのか、
一度に連続して読み書きするのかなど。



725 名前:nobodyさん [04/10/20 14:16:48 ID:ejI/DpjA]
aaa

726 名前:nobodyさん [04/10/21 19:09:46 ID:wxBAgdgR]
perl,phpの両スクリプトから書き込みがあるファイルがあるんだが、
mkdirとかにしといた方が無難かね?
それぞれでflock()したって排他かからない?

727 名前:nobodyさん mailto:sage [04/10/21 19:24:18 ID:???]
実装言語がどれでも中では flock(2) を呼ぶわけだし flock() で問題ないんじゃない?

728 名前:nobodyさん mailto:sage [04/10/21 23:27:35 ID:???]
>>727
デマ飛ばすな。ボケッ

man perlfunc
flock FILEHANDLE,OPERATION
Calls flock(2), or an emulation of it, on FILEHANDLE.Returns true for success,
false on failure. Produces a fatal error if used on a machine that doesn't implement
flock(2), fcntl(2) locking, or lockf(3). flock is Perl's portable file locking interface,
although it locks only entire files, not records.

729 名前:nobodyさん [04/10/22 01:27:00 ID:W+TTmfbF]
>>727
なるほど、結局perl,phpのflock()が同じシステムコールを使うかどうかって所ですかね?
linux(redhat)なんですが、普通にflock(2)使ってると思って良いのかなぁ。

730 名前:nobodyさん mailto: [04/10/22 17:20:32 ID:???]
通常、perlのflock()もphpのflock()も、下位レベルで使ってるシステムコールはflock(2)なわけだが。

731 名前:nobodyさん mailto:sage [04/10/23 01:59:39 ID:???]
言語, OS, ファイルシステム等の実装に依存
php4.3.9/linux はソース確認したところ flock(2) 使ってないよ。fcntl(2)。

732 名前:nobodyさん mailto:sage [04/10/23 02:53:34 ID:???]
perl5.8/linuxはflock(2)だっけ?fcntl(2)だったっけ?

733 名前:nobodyさん mailto:sage [04/10/23 04:34:45 ID:???]
ごめん、phpでもflock(2)使ってた. -->731は間違い
双方とも flock(2) が使える環境では flock が使われる.

また間違ってるかも知れないので、調べたソースを書いておく。
php-4.3.9 ./ext/standard/flock_compat.c
perl-5.8.5 ./pp_sys.c


734 名前:nobodyさん mailto:sage [04/10/23 13:22:56 ID:???]
おお、すばらしい。
flock(2)使える環境って前提になるが(BSD,SystemV,Linux?)、PerlでもPHPでもflock()でいけるのか。
NFS上のディスクは別として。



735 名前:nobodyさん mailto:sage [04/10/25 18:24:04 ID:???]
なるほどねぇ

736 名前:nobodyさん mailto: [04/10/25 19:07:12 ID:???]
lockアゲ

737 名前:nobodyさん [04/11/06 19:49:00 ID:em3fuQlS]
 

738 名前:nobodyさん mailto:sage [04/11/06 19:58:00 ID:???]
flock最強神話

739 名前:nobodyさん mailto:sage [04/11/07 05:49:26 ID:???]
RDBMSで行ロック最強

740 名前:nobodyさん mailto:sage [04/11/07 23:08:21 ID:???]
結局、KENTのmkdirやsymlink、初心者のよく使うflock、どこかでみたrename、格付けするとどうなの?

741 名前:nobodyさん mailto:sage [04/11/08 00:05:16 ID:???]
>>740
格付けなんて意味ないのでは?適材適所でしょ。

742 名前:nobodyさん mailto:sage [04/11/08 00:10:15 ID:???]
>>740
flockを使う奴は素人だといいたいのか〜(w

743 名前:nobodyさん mailto:sage [04/11/08 00:30:26 ID:???]
>>740
KENTは素人じゃないといいたいのか〜(w

744 名前:nobodyさん [04/11/08 13:12:26 ID:BIj8xOyZ]
最終兵器ロックオン・レーザー搭載!

「一度捕まえたら、離さない・・・・・」

TAITOの名作シューティングRAY・FORCEができるのは
セガサターンだけ!



745 名前:740 mailto:sagePerl歴4ヵ月PHP歴28日 [04/11/08 21:24:24 ID:???]
いや…そういう訳じゃ…

746 名前:nobodyさん mailto:sage [04/11/08 23:46:08 ID:???]
cmpxchg最強

747 名前:nobodyさん mailto:sage [04/11/09 03:55:57 ID:???]
>>744
レイヤーセクションじゃなかったっけ?

748 名前:nobodyさん mailto:sage [04/11/09 07:25:54 ID:???]
>>740
flock>>>>>越えられない壁>>>>>rename=symlink>>mkdir

749 名前:nobodyさん mailto:sage [04/11/09 08:59:34 ID:???]
flockはNFS介して使うと壊れるから糞

750 名前:nobodyさん mailto:sage [04/11/09 13:16:33 ID:???]
激しくループしてるな。

751 名前:nobodyさん mailto:sage [04/11/09 13:43:34 ID:???]
ネタがファイルロックだけだから進展しようが無い

752 名前:nobodyさん mailto:sage [04/11/09 20:07:15 ID:???]
>>749
NFSを使った事無いので、良く分からないので教えてください。

NFSを利用する時はflock関数にflock(2)ではなくfcntl(2)を利用するように
perlをビルドすると思いますが、それでもロックは壊れるのでしょうか。
fcntl(2)で壊れる場合、実際の解決手段として、どのようなものがあるのでしょうか。

753 名前:nobodyさん mailto:sage [04/11/10 00:42:16 ID:???]
>>752
Maildir

754 名前:nobodyさん mailto:sage [04/11/10 01:28:10 ID:???]
>>753
djb 厨ってホントにいつも頭使わずに発言するなあ。



755 名前:nobodyさん mailto:sage [04/11/10 21:25:46 ID:???]
>>753
それは、ロック機構が無くても信頼できるメールボックスの話だと思うのですが、
一般的なファイルアクセスにも使えるのでしょうか。

756 名前:nobodyさん [04/11/12 07:07:11 ID:djvAfFkI]
>>747
レイフォース >>>> 越えられない壁 >>>> レイヤーセクション

757 名前:752 mailto:sage [04/11/13 13:06:05 ID:???]
調べてみたところ、
・NFS Version4なら、ロック機構が組み込まれているので問題が無い(flock(2)でok?)
・NLM(Network Lock Manager)プロトコルに対応したサーバとクライアントならば、
fcntl(2)で対応可能。(ただし、一部のシステムで信頼が無いかも)
・それ以外はロックファイルを作るのが一般的
という感じらしいことが分かりました。
ありがとうございました。

758 名前:nobodyさん [04/11/13 15:51:42 ID:6imth/Ie]
>756

レイストーム >>> レイフォース >>> レイクライシス

759 名前:nobodyさん mailto:sage [04/11/14 12:08:06 ID:???]
レイフォース=ガンロック >> php >> perl >> レイヤーセクション >> レイストーム / レイクライシス

760 名前:nobodyさん mailto:sage [04/11/15 01:32:31 ID:???]
なんか、SIMPLE1500のTHEダブルシューティングが欲しくなってきたw

761 名前:nobodyさん [04/11/18 09:27:07 ID:upfr9/ei]
>>760
それなに?

762 名前:nobodyさん [04/11/18 10:10:24 ID:3NzX+MnA]
俺もレイ・フォースは好きだったな
懐かしい

763 名前:nobodyさん [04/11/18 19:52:46 ID:GLzLqJbZ]
>>762 同意。

764 名前:nobodyさん mailto:sage [04/11/18 20:49:35 ID:???]
おめーらロックすんぞ



765 名前:nobodyさん [04/11/27 15:36:14 ID:o5xdYnQz]
ファイルロックって読み込むときは必要無いの?

766 名前:nobodyさん mailto:sage [04/11/27 15:54:59 ID:???]
ロックするべ?

767 名前:nobodyさん mailto:sage [04/11/27 17:40:53 ID:???]
>>765
書き込みが行われず中身が固定のファイルなら不要

768 名前:nobodyさん mailto:sage [04/12/04 12:35:02 ID:???]
質問しに来たらすでに同じ質問してる人がいた。

>>765-767
サンクス

過去ログは見るもんだ。

769 名前:nobodyさん mailto:sage [04/12/04 19:37:01 ID:???]
それは過去ログって言わないけどな

770 名前:nobodyさん mailto:sage [04/12/20 07:41:20 ID:???]
追記モードのやつを読むときはいらないんじゃないの?
壊れてる可能性のあるところってバッティングしているときのだけでしょ?

771 名前:nobodyさん [04/12/20 14:13:21 ID:sskqg6P0]
phpとperlでflock関数でファイルロックをしてますが
現在1つのスクリプト中に複数の箇所でファイルロックを使ってます。
これらのファイルロックを全てやめて代わりに、
スクリプトの一番最初でダミーのファイルにロックをかけて
スクリプトの一番最後でロックを解除するようにして他のプロセスが
スクリプトを実行しているときはスクリプトの実行自体を順番待ちさせて
同時に複数のプロセスがファイルへの書き込みをできないように
変えようと思いますが、何か問題あるでしょうか?
1つ気になるのは、もしスクリプトの途中でexit関数等でスクリプトの実行が終了した場合は
自動的にダミーファイルのロックが解除されファイルも自動的にcloseされますか?

772 名前:nobodyさん mailto:sage [04/12/20 15:14:56 ID:???]
>>770
追記であろうがなかろうが書き込みはロックした上で行われるのなら
読み込みだけのときはロック不要。

773 名前:nobodyさん mailto:sage [04/12/20 15:30:20 ID:???]
>>771
プロセスが死ねばロックは解除される。
先頭と末尾でロックと解除をするようにするのはいいが、
パフォーマンス低下は明らか。

774 名前:nobodyさん mailto:sage [04/12/20 16:09:04 ID:???]
mod_perl や mod_php のときって
スクリプトの実行が終了してもプロセスは死なないと思うけど
mod_* がスクリプト中の flock の後始末を面倒見てくれるんですよね?



775 名前:nobodyさん mailto:sage [04/12/20 20:09:18 ID:???]
>>770
二つ以上のプロセスが同時に追記したら、データが混じる可能性があるし。

>>772
勧告ロックはそうはいかない。

>>774
PHPは面倒みてくれるけど、mod_perlのファイルハンドルは無理。
だから、IO::File,FileHandleモジュールなどを使う。
perl.apache.org/docs/1.0/guide/porting.html#Filehandlers_and_locks_leakages

776 名前:770 mailto:sage [04/12/20 21:19:18 ID:???]
>>772
ロックしなくて読んでいいのは、追記モードのときだけではないの?
上書きモードだと一旦中身が空になるわけで、そのときロックしないで
読んでしまったらだめだよね?

読み込んで、それをそのまま出力しておしまいな 2ch の read.cgi
みたいなやつならそういうアプローチもいいだろうけど、読んだデータ
を処理に利用する場合はだめと思う。

>>775
>>770 のやつ 「書込時にちゃんとロックする前提で」っていうのが抜けてた。スマソ


777 名前:771 [04/12/20 21:25:49 ID:sskqg6P0]
>>773
回答ありがとうございます。
やっぱパフォーマンスの問題になりますか…

778 名前:nobodyさん mailto:sage [04/12/20 21:25:58 ID:???]
>>776
ロックして書き込み中は読み込もうとしてもアクセスできないだろ。

779 名前:nobodyさん mailto:sage [04/12/20 22:28:54 ID:???]
>>776
追記モードでも、書き込み途中の中途半端なデータを読む可能性を考えればダメでは?

780 名前:nobodyさん mailto:sage [04/12/20 23:16:39 ID:???]
>>778 なこたぁない。。

>>779
そだね

けちろん: 読み込みデータがハンパでもいいタイプのシステムなら
ロックは無用。読み込みデータがその後のデータに関わってくるのなら
ロック白

781 名前:nobodyさん mailto:sage [04/12/20 23:47:40 ID:???]
>>778
ロックの掛け方による

>>779
例えば固定長なら書込み途中のデータを見分けて使わない機構とかできそうな予感がするな?

>>780
そのけつろんは読みの場合限定ってことで

782 名前:nobodyさん mailto:sage [04/12/21 06:25:34 ID:???]
>>778
アドバイザリロックはいくらでもロックを無視できる。

783 名前:  [05/02/02 14:16:34 ID:hfbAK0ph]
 

784 名前:nobodyさん mailto:sage [05/02/26 07:20:55 ID:???]
ロック状態を保持するデーモン作る




785 名前:nobodyさん [2005/03/27(日) 21:58:07 ID:frr01O3q]
それ最強

786 名前:nobodyさん [2005/03/28(月) 02:50:20 ID:QWQNdIyl]
ユーザ名とロックIDを引数にしてロック状態の設定、解除、状態取得を行えるCGIサービスを誰かやって!
もちろん無料で( ̄ε ̄@)」

lock.service.jp/lock.cgi&user=xxx?id=1?timeout=60
lock.service.jp/status.cgi&user=xxx?id=1
# <html><body>OK</body></html>
# <html><body>NG</body></html>
lock.service.jp/unlock.cgi&user=xxx?id=1

こんな奴


787 名前:nobodyさん mailto:sage [2005/03/28(月) 03:17:29 ID:???]
>>786
実在のドメインを例示に使うなと何度(ry

788 名前:nobodyさん mailto:sage [2005/03/28(月) 03:50:52 ID:???]
( ̄ε ̄@)

789 名前:nobodyさん [2005/03/30(水) 16:45:20 ID:0SN1W7SJ]
二つ以上のファイルをflockしても問題ないんですか?
flock(FH, 2);
flock(FH2, 2);


790 名前:nobodyさん mailto:sage [2005/03/30(水) 17:17:26 ID:???]
>>789
ないよ。

# デッドロックには気を付けてね。

791 名前:nobodyさん mailto:sage [2005/03/30(水) 18:55:15 ID:???]
To: lock@xxxx.xx.xx
Subject: Lock

user=xxxx
pass=xxxx
timeout=60
lock-id=1
==========
Subject: Unlock
==========
Subject: Status

こんな感じのメールでロック状態を管理してくれるサービスきぼんw


792 名前:nobodyさん mailto:sage [2005/03/30(水) 19:01:47 ID:???]
伝書鳩 (ry

793 名前:nobodyさん mailto:sage [2005/03/31(木) 04:46:07 ID:???]
>>792
それだ!

To: lock@xxxx.xx.xx
Subject: Lock

user=xxxx
pass=xxxx
timeout=60
lock-id=1
=======

登録してある住所にlock-id確認コードを郵送

登録ページからlock-id確認コードを入力


794 名前:789 mailto:sage [2005/03/31(木) 09:19:53 ID:???]
thnx>>790



795 名前:nobodyさん mailto:sage [2005/04/02(土) 05:31:48 ID:???]
rename $0 $0.tmp
perl $0.tmp
rename $0.tmp $0



796 名前:nobodyさん [2005/04/04(月) 15:59:12 ID:UmDaQFM/]
>>795
すげw







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

前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