上にカウンターを表示しています.
カウンター値は、実験のため大きな値にしています。
ブラウザの更新ボタンを押してみてください、カウンター値が上がっていきます。
#!/usr/bin/perl | |
require 'gifcat.pl'; | 使用するサブルーチンの格納されているファイルを宣言 |
$lock_file = "edperl13_3.lock"; | ロック用ファイルを指定 |
&lock; | ロック用サブルーチンをコール |
open(IN,"cnt.dat") || &error(1); | cnt.datはカウンタ値保存用ファイル |
$cnt = <IN>; | カウンタ値の読込み |
close(IN); | ファイルのクローズ |
$cnt++; | カウンタ値を1UP |
open(OUT,">cnt.dat") || &error(1); | cnt.datを書込みオープン |
print OUT $cnt; | カウンタ値の書込み |
close(OUT); | |
unlink($lock_file); | ロックを解除 |
while(0 != $cnt){ | |
$num_gif = $cnt % 10; | 各ケタの値を計算 |
unshift(@files, "c1_$num_gif.gif"); | 各ケタのgifファイル名を配列に設定 |
$cnt = int($cnt / 10); | |
} | |
print "Content-type: image/gif\n\n"; | gifデータを送ることをブラウザへ通知 |
print &gifcat'gifcat(@files); | カウンター用gifファイルを合成して出力 |
exit; | ここでプログラム終了 |
sub lock { | |
$retry = 5; | ロック解除リトライ回数 |
while (!symlink(".", $lock_file)) { | ロック |
if (--$retry <= 0) { &error(0); } | すでに、ロック中 |
sleep(1); | 1秒待つ |
} | |
} | |
sub error { | |
if ((-e $lock_file) && ($_[0] != 0)){ unlink($lock_file); } | ロックの解除 |
@err_msg = ('47','49','46','38','39','61','3b','00''・・・・); | エラーエッセージ用gifパターン |
print "Content-type: image/gif\n\n"; | gifデータを送ることをブラウザへ通知 |
foreach (@err_msg) { | |
$data = pack('C*',hex($_)); | |
print $data; | gifデーターを1byteずつブラウザへ送る |
} | |
exit; | |
} |