Perl5を使ってCGIを作っています。
環境としては、OSはLinuxです。

ファイルロックなんですが、flockを使うということはわかっているのですが、ファイルが壊れ難いファイルロックの書き方というのがあるのなら教えて欲しいと思って質問しました。
初心者なので、出来れば書き方・使い方を詳しく教えて頂けたらと思います。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こちらのページも大変参考になりますよ。



参考URL:http://www.din.or.jp/~ohzaki/perl.htm#File_Lock
    • good
    • 0
この回答へのお礼

大変遅くなりましたが、ご回答ありがとうございます。

ファイルロック、まだまだ勉強したいと思います。

お礼日時:2001/12/18 20:19

こちらに詳しい記述があります。

なかなか難しいですね。

参考URL:http://tohoho.wakusei.ne.jp/wwwcgi8.htm
    • good
    • 0
この回答へのお礼

大変遅くなりましたけど、ご回答ありがとうございます。

ファイルロックに関しては完璧というものはなさそうですね。

お礼日時:2001/12/18 20:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QPerl(cgi)からPerl(cgi)への引数

(1)Perl(cgi)から(2)Perl(cgi)へ引数(データ)を渡す方法を教えてください。

プログラムの流れとしましては、
(1):データベースを検索&該当結果の番号をリンクで表示
(2):(1)でクリックしたリンクと対応する結果を表示
となっております。

また、セキュリティの事を考えて「POST」で送りたいと考えています。

よろしくお願いいたします。

Aベストアンサー

表題を見たときに「CGIからCGI」ということで、「そりゃ無理」だと思って内容を見たら普通の処理のことだったので遅まきながら回答させていただきます。

要するにひとつ目のCGIが出力したHTMLリンクから次のCGIを呼び出すということですね。

方法というか書き方はいくつかありますが、わかりやすい例をひとつ
ひとつ目のCGIがリンクをはき出す際にリンク先をJavaScriptにしてJavaScriptからフォームにパラメータをセットしてサブミットする方法です。

お役に立てればさいわいです。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<script language="javascript">
<!--
 function fCallNextCGI(P1,P2,P3,...Pn){
  // パラメータ設定
  document.form.H1.value = P1;
  document.form.H2.value = P2;
  document.form.H3.value = P3;
    :
  document.form.Hn.value = Pn;
  // 送信
  focument.form.submit();
 }
//-->
</script>

<body>

<!-- ここからフォーム -->
<form name="form" method="POST" action="NextCGI.cgi">
 <input type="hidden" name="H1" value="">
 <input type="hidden" name="H2" value="">
 <input type="hidden" name="H3" value="">
   :
 <input type="hidden" name="Hn" value="">
</form>
<!-- ここまでフォーム -->

<!-- ここからリンクリスト -->
<a href="#" onClick="fCallNextCGI('文字列1','文字列2','文字列3',...'文字列n')">リンク1</a><br />
<a href="#" onClick="fCallNextCGI('文字列1','文字列2','文字列3',...'文字列n')">リンク2</a><br />
<a href="#" onClick="fCallNextCGI('文字列1','文字列2','文字列3',...'文字列n')">リンク3</a><br />
   :
<a href="#" onClick="fCallNextCGI('文字列1','文字列2','文字列3',...'文字列n')">リンクn</a><br />
<!-- ここまでリンクリスト -->

</body>
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

蛇足
 1.「そりゃ無理」と思った理由:CGIがCGIを多重に呼び出せる機構があったら無限呼出でサーバを簡単にダウンさせることができるため、サーバサイドのスクリプトを多重に起動することはできないような仕組みになっています(例:CGIで出力されたHTML内にSSIを記述して動作を期待すること)。 ただしCGIから呼び出されたプログラムが別のプログラムを起動して処理を受け渡すことは可能です。
 2.上記例でリンクタグの「href=""」内に直接JavaScriptを書くことも可能ですが、対応していないブラウザがあるので要注意

表題を見たときに「CGIからCGI」ということで、「そりゃ無理」だと思って内容を見たら普通の処理のことだったので遅まきながら回答させていただきます。

要するにひとつ目のCGIが出力したHTMLリンクから次のCGIを呼び出すということですね。

方法というか書き方はいくつかありますが、わかりやすい例をひとつ
ひとつ目のCGIがリンクをはき出す際にリンク先をJavaScriptにしてJavaScriptからフォームにパラメータをセットしてサブミットする方法です。

お役に立てればさいわいです。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓...続きを読む

QCGIでPHPではなくPerlを使っている理由はなんですか

私は昔Perlを独習してカウンタがつくれる程度だったのですが、最近勉強しなおして掲示板やHTML編集に使ってます。

しかし最近PHPというものがでてきて、WEBならPHPだと言われるようになりました。
しかしPerlを使っているので、どうしてもPHPを一から勉強する気になれなく、ずるずるといっています。

CGIでPerlを使っている人は、それ以外で、PHPよりPerlのほうがここがいいから使っている、もしくは、こうこうこういう理由でPHPに乗り換える必要がない、という方はおられますか?

Aベストアンサー

Perl、PHP両方使っています。

・Perlの利点は、情報が多い、サンプルが多い。バージョンによる差がない。
・PHPの利点は、データベースと連携が簡単。記述が少なくてすむ。

などでしょうか。PHPはまだバージョンアップが頻繁で、バージョンによって
動作しなかったりします。ただその辺りがなくなれば、PHPのほうが楽ですね。

最近PHP5から簡易データベースのSQLiteも付いてきているのでこれが普及すれば
益々良くなりそうです。

ただ、Perl PHPは非常に似ているので使う上での違和感は全然ありませんよ。

Qhtmlのcheckboxのデータをcgiファイルで表示できない?perl初心者の質問。

htmlの中でcheckboxのデータをcgifile で表示できません。構成は
入力用のhtml file、それを受け取るcgi file、表示用のalert.htmlファイルです。

my $kako = $query->param('kako'); #html fileからのデータ受け取り用です

#下のスクリプトは表示のためのperlコードとして書いています。

if($e_kako){
$t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"裁断\"> 裁断 ";
$t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"中とじ\"> 中とじ ";
$t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"無線綴\"> 無線綴 ";
$t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"穴開け\"> 穴開け";
}else{
$t_kako = "$kako <input type=\"hidden\" name=\"kako\" value=\"$kako\">\n";
}

#alert.htmlには下のようにして渡しています。
sub replaceTags{
foreach (@html){
s/<CGI:error message>/$errMsg/i;
s/<CGI:error num>/$errNum/i;
s/<CGI:kako>/$t_kako/i;

データの渡し方がわからないのでよろしくお願いします。
下の場合はうまくいってます。

# page
$t_page="<input type=\"text\" size=\"10\"";
$t_page .= "name=\"page\" value=\"$page\">\n";

htmlの中でcheckboxのデータをcgifile で表示できません。構成は
入力用のhtml file、それを受け取るcgi file、表示用のalert.htmlファイルです。

my $kako = $query->param('kako'); #html fileからのデータ受け取り用です

#下のスクリプトは表示のためのperlコードとして書いています。

if($e_kako){
$t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"裁断\"> 裁断 ";
$t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"中とじ\"> 中とじ ";
$t_kako.="<input type=\"checkbo...続きを読む

Aベストアンサー

プログラムの書き方は人それぞれなので、このソースだけでは正しい回答ができるかどうか分かりませんが・・・。

checkboxは同じ名前を持つものを複数選択できるので、一つの変数に入れても上書きされてしまいます。ですので、通常、checkboxの値は配列に格納します。
push(@kako,$query->param('kako'););

ソース全体が分からないので、詳しい回答ができませんが、'kako'の部分を何かの変数にいれて、nameを判別しているとしたら、
if($name eq 'kako'){
push(@kako,$query->param('kako'););
}else{
...
}
このように書けます。
もし一つしか選択させないのであれば、radioを使って今まで通りのやり方で通用します。

Qperl-cgi「日時によるファイル操作」について

perl-cgi「日時によるファイル操作」について

perl-cgiで、あるディレクトリ中のファイル更新日が最も若い2ファイルを表示して、それ以外を削除したいのですがどのようにすればよいでしょうか?


#調べたいディレクトリを読み込む。
$Dir = "./cache";
opendir DIR,"$Dir";
my @alldir = readdir DIR;
close DIR;

#ファイル(パス)名と作成日時を求める。


#最新2つのファイルパス(名)を表示する。
print "NewFile".ファイルパス1;
print "<HR>";
print "OldFile".ファイルパス2;

#最新2つ以外は全て削除
unlink($_);

exit(0);

Aベストアンサー

こんな感じではどうでしょう?

$Dir = "./cache";
#作業し易くする為、カレントディレクトリを変更
chdir($Dir);

opendir(DIR, "./");
@alldir = sort {(stat $a)[9] <=> (stat $b)[9]} grep(-f, readdir(DIR));
closedir(DIR);

print "NewFile" . pop(@alldir);
print "<HR>";
print "OldFile" . pop(@alldir);

unlink(@alldir);
#カレントディレクトリを元に戻す
chdir("../");

Qcgi(perl使用)でファイルを作る方法を教えてください

こんにちは、
perlをやっています。
プロバイダ上にperlスクリプトを拡張子cgiでUPしています。

いまやりたいことがあるんです、それは
ファイルをサーバ上の領域に作るというものです
(ちなみにサーバの種類はUNIX系です)
ファイルはゼロバイトの何も無いテキストファイルを作りたいんですが
どのような関数を使えばファイルができるのでしょうか。

また、ファイルを作った後パーミッションの変更(chmodコマンドのような
動き)をする関数等があれば教えてください。

Aベストアンサー

open(FILE,">data.txt") or die;
close(FILE);
パーミッションの変更は
chmod 0666;

これでどうでしょうか


おすすめ情報