|
>>2109 68user > ($name, $age, $year) =~ m/^(.*)\s+(\d+)\s+(\d+)$/; 余計なような足りないような… ($name, $age, $year) = m/^(.*)\s+(\d+)\s+(\d+)$/; 若しくは ($name, $age, $year) = $_ =~ m/^(.*)\s+(\d+)\s+(\d+)$/; では無いでしょうか? |
|
早々の返事ありがとうございますm(__)m 参考に勉強させてもらいます. みなさんすごいですね.ってこういうのでつまづいているのは僕だけかな(TT いまから,↓の$や()や\や+がごちゃごちゃしたものをゆっくり理解していきたいとおもいます. 実は今,これでいうと22の部分をTkのGIFgraphで表現しようと思ってるんです. テキストファイルが定期的に書きかえられるのでグラフ化したいと思って. それで,いま撃沈しているところを聞かせていただいたんです. 出きるだけ御迷惑をかけないように自分で努力したいと思いますが,また質問してしまうと思うのでそのときはよろしくお願いします. |
|
はじめまして。68userさんのページはとても勉強になります。時間があったら、全文を熟読したいと思います。(そんな時間ないかもしれませんが。) それにしても、毎回いろいろな人からの質問に応えることのできる知識に、 少し圧倒されました。自分はまだまだ未熟者です。今後どーしてもわからないことがあったら、質問するかもしれませんので、そのときは、どうかよろしくお願いします。 |
|
ふと思ったのですが、CGIへPOSTメソッドでデータを送信した時に そのCGIでデータを受け無い時(readしない場合)って、そのデータは どうなるのでしょう? CGIで、最近流行りのバッファーオーバーフロー対策?として、POST データサイズを予め調べてから、read で読み込むようにしようと 考えましたが、このような場合は、サーバーOS/ソフト側でバッファ に一旦溜まるのでしょうか? それとも、CGIが受け取らない限りOS/ソフト側でデータそのものを 受け取らないのでしょうか? 試しに自環境にあるApacheに、アップロード機能付きの掲示板CGIを 使って約80Mbを送信してみましたが、cgi-lib.pl のエラー?でCGIは 停止したらしく、ps コマンドを見ると、zonbi となっていたため、 httpdがタイムアウト処理?をして切断された結果(だと思う)、ブラウザに 「cgi-lib.pl: Request to receive toomuch data: 84400432 bytes」と 表示され切断されたように見えました。 そして、その状態まで送信は止まらずにブラウザは送信を続けていました。 top や free で送信中のメモリの状態を観察していても変化がなかった 事から、CGIが受け取らないと捨てられてしまうようにも見えますが、 ちゃんと試験が出来ていたのか、自信が無いので正確な所は不明です。 結局、CGIでPOSTデータを受け取らなくても(プロセスが死んでいた為) ブラウザ自身は送信を続けていたので、どの時点で(OSかApache)データ を破棄しているのかは判断できませんでした。 そもそもCGI側でオーバーフローを気にしなくても良いならば、それでいい のですが、どうも動作が判りません。 #それとも実装依存なのかな? |
|
>>2110 /tk > 余計なような足りないような… 確かに。補足どうもです。 >>2112 moz > 質問するかもしれませんので、そのときは、どうか > よろしくお願いします。 ぜひ回答する側にもまわって下さい :-) >>2113 スナフキン > そのCGIでデータを受け無い時(readしない場合)って、そのデータは > どうなるのでしょう? 実装依存です。TCP 的に言えば、相手側がプロセスが read してくれないと相 手側の OS のバッファにたまります。それがいっぱいになったら書き込み側が ブロックします。つまり print SOCKET "...."; を実行したままずっと止まってしまうということです。 ちゃんと調べたわけではありませんが、一般的にPOST データを全部受け取っ て CGI に渡す web サーバが 多いような印象を受けます。あくまで印象なの で、試したわけではありません。 もし int sock; bind(...); listen(...); sock = accept(...); ... ヘッダ読み込み ... if ( fork() == 0 ){ char *args[]={"/home/user/public_html/cgi-bin/foo.cgi", NULL}; dup2(sock, 0); execvp("cgi", args); } else { int status; wait(&status); } のように、直接ソケットを CGI プロセスの標準入力に渡すような 実装ならば、CGI プロセスが read しないと書き込み側がブロック するわけですね。 apache の実装がどうなっているかわかったら僕にも教えて下さい。 |
|
>>2114 68user なんかいろいろとアレなので、書き直し。 int sock; int pipes[2]; bind(...); listen(...); sock = accept(...); ... ヘッダ読み込み ... pipe(pipes); if ( fork() == 0 ){ char *args[]={"cgi", NULL}; dup2(sock, 0); dup2(pipes[1], 1); execvp("/home/user/public_html/cgi-bin/foo.cgi", args); } else { char buf[256]; int len; int status; while ( len=read(pipes[0], buf, sizeof(buf) ){ write(sock, buf, len); } wait(&status); } ソケットのデータを CGI プロセスの標準入力に渡し、 CGI プロセスの標準出力を受け取り、そのままブラウザに 返す web サーバもどきです。 |
|
こんにちは。又お邪魔させてもらいました(^^;) この前はありがとうございます。うまくできました\(^o^)/ 今回は、Perl/Tkなんですがアドバイスよろしくお願いします。m(__)m リストはこんな感じなんですが・・・ use Tk; $mw = MainWindow->new; $mw->title("gifgraph"); $can = $mw->Canvas(-width=400, |
|
すみません↓ tabで形をそろえようとしたら送信のところにいっちゃってenterおしちゃいました(^^;; ヒヤアセ で、リストは use Tk; $mw = MainWindow->new; $mw->title("gifgraph"); $can = $mw->Canvas(-width=>400, -height=>300) -pack(); for(;;){ $gif = $mw->Photo(-format=>'gif', -file=>"graph.gif"); $can->createImage(200,150,-image=>$gif); $mw->after(4000); } 画像が更新されるのでfor文で何度も画像を読みこませたいんですが、ウィジェットすら開かないんです。for文をはずせば今ある画像が表示されるんですが、なぜなんでしょうか? |
|
>>2117 CCIE Perl/Tk は久しくやってないので忘れてしまいましたが、 $can->createImage(200,150,-image=>$gif); $mw->after(4000, \&change_image); MailLoop; exit; sub change_image { $gif が変わっていたら $can をいじる } じゃないですかね。 |
|
参考にさせていただきました。 少し手を加えてなんとか表示できました。それで、 GDモジュールとGIFgraphモジュールでgifを作って for(;;){ ・・・・・・ } の中に入れたんですが $my_graph=new GIFgraph::lines(); ・・・・・ 見たいな感じでGIFgraphを定義させました。 for文の外にこう言う定義は書いたらいいんですが、このモジュールの仕様?(バグ)で中に入れてどんどん作らないと更新されないんで中に書きました。 でもそうすると何度も定義するのでメモリがどんどん食われていくんです。メモリの制御を除いてもメモリが増えていってました。 前に定義したものが残っているのでそれを破棄するってことはできるんでしょうか? |
|
>>2115 68user そうですか実装依存ですか。それが判っただけでもOKです。 ありがとうございます。 perl側では、あまり意味がないという事になりますかね。 しばらくApache関連の情報も探しましたが、今の所該当する 情報は見つかりません。 わざわざ例題(cですよね?)まで書いてもらいましたが、 よく判りませんでした。m(_ _)m cが解かればソースを見て何とかなるかもしれませんが、 まだ不勉強なので… 何か見つけたら報告します。 >>2105 ふくし >ところで、1.1 をお使いですよね? いえ、B20でした・・・って最近使っていないのがバレバレですが(笑) 自分は、DOS上では面倒な処理をする必要がある場合ぐらいしか 使ってません。普通は本物の環境で作業しています。 Cygwin でシンボリックリンクまで対応している事を知ったのも、 最近です(笑) |
|
すいませんヘルプです。 SUN SPARC ServerUitra5にモデムをつけようとして ttyポートを書き変えたらディスプレイが 見えなくなってしまいました。 モデムから入りエミュレータ−から見るととプロンプトのところに?<クエスチョンマーク>がでてこんな事になってます。 ok の後に ls−a をやって見ました。 ls -a f006cd5c SUNW,UltraSPARC-IIi@0,0 f005f2f8 pci@1f,0 f004cd88 virtual-memory f004c7a8 memory@0,10000000 f002ccf0 aliases f002cc80 options f002cb48 openprom f002cadc chosen f002ca6c packages ok ディスプレイを復活させるためには どうすれば良いのでしょうか? |
|
とっても今さらですが、 >>2119 CCIE > 前に定義したものが残っているのでそれを破棄するってことはできるんでしょうか? 最小限のスクリプトを見せてもらえればわかるかもしれません (し、わからないかもしれません)。 >>2121 木島 透 すいません、わかりませんです。 ところで、また UNIX の部屋のカウンタが壊れているなぁ。 http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/count/countup.pl?rev=HEAD&content-type=text/x-cvsweb-markup で怪しそうなところと言えば、 sub counter_increment { ... myopen(OUT,"> $countdir/count.$ARGV[0]") || exit; print OUT "$num\n"; close(OUT); } ここらへんでブラウザが中断されて SIGPIPE 受けた、くらいしか 思い付かない。 ちなみにこのサーバは行儀の悪いロボットのせいか、しょっちゅう file: table is full となります。この前は apache が落ちた形跡があるし。うーむ。 |
|
みなさん、はじめましてこんばんわ。 IPなど、とっても私にとっては難しい事なのですが、今困っていて、ここを探しました。 実はいつも行くHPの掲示板などに、荒らしがヒドイんです。 管理人さんは、海外にいるとか、何とかで・・・。管理されていないんですよね。元々は、すごく雰囲気がよくて、みんなが楽しめていた掲示板だったんですが・・・。荒らしが多すぎて、無視して、カキコミしてたら、ほんの数時間前にカキコミしたのが、消えてしまっている・・・その位、ひどいんです。 どうにか出来ないものでしょうか?記事の削除などは、管理人さんしか出来ないですよね?でも、管理人さんが管理をしないので・・・。 困ってしまって・・・。そしたら、IPで、拒否できるっていう情報を聞きました。それも、管理人さんじゃないと出来ない方法なのでしょうか? 無知すぎる自分も悪いんですが・・・一日も早く、荒らしがいない掲示板に戻ってほしいと思っています。なにか、いい方法があるかたは、教えていただきたいです。 長々と申し訳ありませんでした。 |