/:|. /:|
/ .:::| / ::|
| ...:::|_ / :::|
i  ̄ ̄⌒゙゙^――/ ::::::|
/ :::::::::\
/|・\ ./・> :::::::::\
/ミ\ \ / /彡 i し./:::::::\
/ ミ\.\ヽ|||liiiii||/ /./彡 ノ (::::::::::::::::::\
/ ミ\\|||iii||l//彡 '~ヽ :::::::::::::::\
/  ̄  ̄,,、 /:::::::::::::::::.\
ファビョ━━━━━/ \ / ,,____ _,/ ̄ \ \ /::::::::::::::::::::::::::::\━━━━━ソ!!!!!
\ |.. | /└└└└\../\ /:::::::::::::::::::::::::::::::::/
\ ∨.|lllllllllllllllllllllllllllllllllllllllll| /::::::::::::::::::::::::::::::::::/
\ |.|llllllllllllllll;/⌒/⌒ | ::::::::::::::::::::::::/
\ |.|llllllllll; ./ . . | :::::::::::::::::::/
/ |.|llllll|′ / . | | ::::::::/|
/ |.|llll| | .∧〔 / ::::::::::::::::\
/ }.∧lll | ../ / / :::::::::::::::::\
/ /| \┌┌┌┌┌/./ /::: :::::::::::::::::\
/ ( ゙゙^^¨^¨゙゙¨  ̄ ̄ ̄ /::::::::::: ::::::::::\
/ ヽー─¬ー〜ー――― :::::::::::::
953 :
931:03/03/11 17:24 ID:faQewhAO
>>953 いくらおねがいしても誰もやる気ないようだ
自分でできるところまでやってみてそれを元にアドバイス求めれ
>>949 既に解決しているだろうと思うけれど、念のためにカキコすると
flock関数はopen関数で指定されたファイルハンドルで使用するため
指定のルーチンをそのまま置き換えるには無理があるYO
実際はもっと簡単にできる
flock関数を使用している他のソースを調べましょう
956 :
872:03/03/11 18:47 ID:k4GIfrjV
>>949 $lockkey = '3';
#&lock内に追加
if ($lockkey == 3) {
for ($i; $i<=5; $i++) {
if (flock (FH, 2)) {
last;
} elsif ($i == 5){ &error('LOCK is BUSY'); }
sleep(1);
}
}
#同じく
sub unlock {
if ($lockkey == 1) { unlink($lockfile); }
elsif ($lockkey == 2) { rmdir($lockfile); }
elsif ($lockkey == 3) { flock(FH, 8);}
$lockflag=0;
}
957 :
872:03/03/11 19:18 ID:k4GIfrjV
>>957 ん? なんで謝るのYO
ファイルハンドルとサブルーチンを呼び出す位置を間違っていなければ
sleepする必要はない気がするけれど・・・構わないんじゃないの
959 :
949:03/03/11 20:41 ID:???
皆さんレスありがとうございます。
>>956さん
試してみたんですが、LOCK is BUSYばかり出て書き込めませんでした。
>>955さん
とりあえず以下のように記述してみました。
open(IN,"$logfile") || &error("ログファイルが開けません");
flock( IN, 1 ); #ファイルを読み出しロック
@lines = <IN>;
flock( IN, 8 ); #ロック解除
close(IN);
open(OUT,">$logfile") || &error("ログファイルに書きこめません");
flock( OUT, 2 ); #ファイルを書き込みロック
print OUT @lines;
flock( OUT, 8 ); #ロック解除
close(OUT);
これで書き込めたんですが、あっているでしょうか? ファイルロックができているかチェックする方法とかありませんか?
flock( OUT, 2 ) || &error("失敗");
flock( OUT, 8 ); #ロック解除
はいらない
flock( OUT, 2 ) || &error("失敗");
??
>>959 あってるYO
ファイルロックのテストは、適当にfork関数で多数の子プロセス上で排他処理させるか
指定時刻にファイルの読み書きのループを一斉に開始するスクリプトなどで
気の済むまでやるしか無いでしょう
もちろん、後からでも正常に処理できたかは分るように、読み書きする内容はキチンとプログラムしましょう
あ・・・テストは自分のPC上でローカルでどうぞ
>>959 危なっかしいけど、まあいいだろ
ロック解除は不要
966 :
949:03/03/12 18:36 ID:???
皆様ご親切にありがとうございました。
>>964さん
この記述は危ないんですかね?
>>966 この部分だけじゃ$logfileがどの程度重要なものか
わからないけど、十分な安全性があるとは言えないな
>>967 $logfileが重要かどうかではなくて、その内容によるYO
>>966 ファイルロックトも兼ねてテストすれば、問題点はすぐに気が付くハズ・・・
>>968 なんだ・・・ファイルロックトって(w
ファイルロックだYO
open(OUT,">$logfile") ←この時点でファイルはクリアされる
←ここで別プロセスがファイルを操作する危険も
flock( OUT, 2 );
print OUT @lines; ←この前までにプロセスが死んだらファイルは破損
flock( OUT, 8 );
←ここで別プロセスがファイルを操作する危険も
close(IN); ←実際の書き込みが行われるのはここ(オートフラッシュなしの場合)
>>970 なるほど、open(FH, ">filename") でファイルを開いただけでは
ファイルは変更されていない状態だと思っていましたが・・・確かに危険ですね
">>filename"などでオープンして、turncateで0指定する方法をとるべきか・・・
良い事を教えてもらいました。ありがとうございます
失礼しました
972 :
山崎渉:03/03/13 17:00 ID:???
(^^)
973 :
931:03/03/15 11:29 ID:???
975 :
名無し:03/03/15 16:35 ID:55qzOCkc
976 :
ウマー(゚Д゚)@Apw5yill☆2ch:03/03/15 16:39 ID:abzlUrYY
質問です。CGIで例えば、****.cgi?1111
みたいな、?1111を付け加えて表示させる物があります。そこで、
URL転送を使って、***.com/1111を入力すると、****.cgi?1111が表示
されるように、転送先を****.cgi?にしましたが無理でした。
なにかいい方法はありませんか?
977 :
007:03/03/15 16:48 ID:???
タイトル入力するところあるぞぃ
# タイトル名
$title = "Fantasy Board";
ってやつが
>>973 while (<IO>){
if ($_ =~ /<>$ip/){
@y2=split(/<>/,$_);
if ($y2[6] ne $ip){
push(@log,$_);
}else{
push(@log,'All Clear (^-^)v');
}
}else{
push(@log,$_);
}
}
980 :
ウマー(゚Д゚)@Apw5yill☆2ch:03/03/15 16:58 ID:abzlUrYY
は、できたんですが、その他にも2222や3333とも指定したいのです。。
>>980 ドキュメントルートに***.com/以降を受け取れるcgiでも作って置けばいい
尚、ここは改造スレにつきスレ違い
>>978さんのとうりにすると
sub deleteme{
#自分の発言消去
open (IO,"+<$logfile");
eval{flock(IO,2)};
while (<IO>){
if ($_ =~ /<>$ip/){
@y2=split(/<>/,$_);
if ($y2[6] ne $ip){
push(@log,$_);
}else{
push(@log,'All Clear (^-^)v');
}
}else{
push(@log,$_);
}
}
truncate(IO,0);
seek(IO,0,0);
print IO @log;
close (IO);
&reload2;
}
でいいですよね?そうしたらScript Errorがでました。
援助お願いします。
>>982 あのままコピペしたんじゃないだろうな?
全角スペースを半角かタブに置き換えたか?
984 :
nobodyさん:03/03/15 21:59 ID:6KH7Xn0j
>>976 >URL転送を使って
多分/以降のデータは中継されないから無理
986 :
975:03/03/15 23:45 ID:MaN1zNKv
>>977 いや、掲示板のタイトルじゃなくて
ここのスレッドにタイトルをつけたいのです。
ここのスレッドとはどこのスレッドですかぁー?w
988 :
nobodyさん:03/03/16 13:59 ID:t8L+n8I+
>>983全角スペースを半角かタブに置き換えたか? ってどういう意味ですか?
990 :
nobodyさん:03/03/16 15:29 ID:vOOsWTxU
そのまま貼り付けたんですけど。
>>990 アホか
コピペした部分の全角スペースを置き換しれ
992 :
nobodyさん:03/03/16 17:44 ID:KSrtergb
新すれはどこですか?
993 :
nobodyさん:03/03/16 17:47 ID:WBb98oow
995 :
nobodyさん:03/03/16 18:08 ID:vOOsWTxU
>>991さん無事できたのですが。
All Clear (^-^)v > () と名前のところにそのALL Clearとでて文字のところに()とでます。
援助お願いします。
996 :
nobodyさん:03/03/16 18:15 ID:vOOsWTxU
↑の続きで
その自分の発言を削除を押した後発言をするとAll Clear (^-^)v > () が消えてしまいます。
997 :
nobodyさん:03/03/16 18:16 ID:x5aWnNPV
いきなり乱入1000
998 :
nobodyさん:03/03/16 18:24 ID:MtdvS7v9
1000!
999 :
nobodyさん:03/03/16 18:24 ID:MtdvS7v9
とう!
1000 :
nobodyさん:03/03/16 18:24 ID:MtdvS7v9
1000げっとーーーーーーーーーーーーーーーズザァアア
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。