68user's page 掲示板

Prev< No. 2081〜2120> Next  [最新発言に戻る] [過去ログ一覧]
No. 2081 # skel.103M [E-mail] 2001/07/19 (木) 16:07:11
いつもお世話になってるskel.103Mです。

>>1978 skel.103M
>>1980 68user
>>1981 skel.103M
このことについて、news:fj.mailに記事が投稿されているのを(今さらなが
ら)発見!:
        Message-ID: <tzzlmmezl9x.fsf@nightmare.hm.taito.co.jp>
…投稿日は2001/06/27(水)となってますね。

No. 2082 # 猫じゃらし 2001/07/29 (日) 15:00:20
はじめまして。
perlを勉強中の者です。
いきなりで恐縮ですが、質問です。

perlのIO::SOCKETモジュールを使ったhttpクライアントを作っているのですが
画像を読み込めないんです。ちなみに、htmlはうまくいっています。
今作っている物では、他サーバーからファイルを読みとり
自分のサーバーに保存という作業をやらせたいんです。
しかし、画像ファイルを読み込むと改行が不要な位置に
改行入ってしまいます。
画像も読み込めるようにするにはどう作りかえたら良いのでしょうか?

ソース
http://uchu.hypermart.net/image.txt

No. 2083 # 68user 2001/07/30 (月) 06:26:03
>>2082 猫じゃらし
ちゃんと環境を書きましょう。Windows ですか?

    1. ヘッダもそのまま 2.gif に出力してしまう。
    2. 改行が入ってしまうなら、Windows でテキストモードになっているのかも。

ということで、

    # ヘッダまでを読み飛ばす
    while (<$remote>){
        last if ( $_ eq "\n" || $_ eq "\r\n" );
    }
    # ここからが画像データ
    while (<$remote>){
        $outdata .= $_;
    }
    open(OUT, "> 2.gif");
    binmode(OUT);
    print OUT "$outdata";
    close(OUT);

でどうでしょう。

foreach を使わず while を使うのは、foreach の () 内はリストを要求する
ので、<$remote> はリストコンテキストで評価され、
  foreach ("1行目のデータ", "2行目のデータ", ..., "最終行のデータ"){
と展開されてしまうからです。よって、
    foreach (<$remote>){
        last if ( $_ eq "\n" || $_ eq "\r\n" );
    }
の時点でファイルハンドル <$remote> から全てのデータを読み
切ってしまうので、last で抜けた後には <$remote> という
ファイルハンドルにはデータが残っていません。

    foreach (scalar(<$remote>)){
で強制的にスカラーコンテキストにするならいいんですが、
この場合は素直に while を使った方がよいでしょう。

No. 2084 # 猫じゃらし 2001/07/30 (月) 14:35:52
>>68user
環境を書き忘れてすいません、マナー違反でしたね、、、
ちなみに、環境はWinMEでActivePerlを動かしている状態です。

さて、68userさんのレスにあったものをペーストして
ソースは下のようになりました。
http://uchu.hypermart.net/image2.txt

これで無事動かすことができました。ありがとうございます。
このHPは、これからも勉強参考にさせてもらいますね。
ではでは、、

No. 2085 # kazu 2001/07/30 (月) 16:17:17
はじめまして超初心者の者です。
質問なのですけど会社で渡されたCシェルのプログラムに

mailx -s

というコマンドがありまして調べても見つかりません。
UNIXのことなどさっぱり分からないので困っています。
知っている人がいたら教えてください。
お願いします。m(__)m

No. 2086 # 68user 2001/07/30 (月) 17:36:39
>>2085 kazu
ちゃんと OS 名やバージョンなどの情報を書きましょう。

> mailx -s
mailx は SystemV 系 UNIX のコマンドです。Linux にも
あるようですが、*BSD にはないはずです (FreeBSD なら
ports で mail/mailx がありますが)。

まぁメールの送信だけなら mail も mailx も同じようなもの
なので、そのまま mail に読み変えればよいでしょう。

No. 2087 # sato.k [E-mail] 2001/07/31 (火) 11:41:58
はじめまして。早速なんですが、UNIXの運用について質問があります。ログインユーザーごとに使用したい文字コードが違うんですが、どのように設定したらよいのでしょうか?教えてください。

No. 2088 # 68user 2001/08/01 (水) 15:09:22
>>2087 sato.k
ログインユーザごとに ~/.cshrc や ~/.profile で
    setenv LANG ja_JP.eucJP
とか
    LANG=ja_JP.eucJP; export LANG
とか書くか、/etc/profile や /etc/csh.cshrc でユーザ名をみて
適切な locale を設定するのはどうでしょうか。

具体的な locale 名や、/etc/ の下のファイル名などは
OS によって違いがあるので、お使いのシステムではどうなって
いるか確認して下さい。

FreeBSD なら /etc/login.conf に各ロケール分のログイン
クラスを作るのもいいかな。

No. 2089 # 68user 2001/08/04 (土) 17:34:26
>>2079 るは
> こちらに掲載されているC言語のechoプログラム(echo-server-1.c)を
> そのまま書き写して実行したのですが、先頭の1文字しか返ってきません。
遅くなりましたが、さきほど直しました。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/echo-server-1.c
ご指摘ありがとうございました。

No. 2090 # 68user 2001/08/05 (日) 04:11:29
UNIX の部屋をやっと CVS に突っ込みました。悲願達成。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/unix/
これで思う存分更新ができます。

    - コンテンツをローカルでも修正し、web サーバでも修正して、
        どっちが最新版かわからなくなる
    - 前回から更新した部分はどこだったろうか? と忘れてしまう
という経験がある方は、CVS で管理してみてはどうでしょうか。
僕はもう CVS なしでは生きていけません。

なお、普通は http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/
のように cvsweb でリポジトリ公開なんてことはしません (笑)
公開しなくても CVS で管理できます。

No. 2091 # 紅の猫 [E-mail] 2001/08/05 (日) 10:11:27
>> こちらに掲載されているC言語のechoプログラム(echo-server-1.c)を
>> そのまま書き写して実行したのですが、先頭の1文字しか返ってきません。
>遅くなりましたが、さきほど直しました。
\nの所に\0を書き込んでる気がします。

No. 2092 # 紅の猫 [E-mail] 2001/08/05 (日) 11:35:58
#2091
>\nの所に\0を書き込んでる気がします。

よく見たら、そんなこと有りませんでした。
訂正します。

No. 2093 # 68user 2001/08/07 (火) 01:10:03
かなりどうでもいい話題なんですが、UNIX の部屋の検索で一件もヒットしな
かったキーワードを調べてみました。対象は 2001 年。括弧内は検索回数。

なんとなく現在足りない情報がわかって興味深かったです。
今後の参考にさせていただきます。

Solaris or SystemV 系 … 特に管理系がいまいち弱くて申し訳ない。
    useradd(541)
    sar(378)
    ufsdump(161)
    pkgadd(146)
    mailx(145)
    dbx(95)
    groupadd(88)
    usermod(74)
    ufsrestore(60)
    usradd(55)
    nawk(54)
    userdel(54)
    pkginfo(54)
    vfstab(50)
    sjtoeuc(40)
    
こんなのふつー載ってるだろ系 … なるべく早く書きます
    ssh(242)
    expr(172)
    scp(149)
    a2ps(108)
    iconv(95)
    chroot(57)
    pushd(52)
    ulimit(49)
    slogin(39)
    rcs(38)
    bz2(36)
    
Windows の用語をそのまま打ち込んだ系?
    rename(171)  mv のところに「Win で言うところの rename」と書いておけばよい?
    tracert(36)  traceroute のところに「Win で言うところの tracert」と書いておけばよい?
    tree(46)  これは find かなぁ。
    
68user の弱い方面系 … 申し訳ない。満足な解説書けません。
    lpr(328)
    arp(194)
    cpio(177)
    iostat(102)
    rsync(79)
    バックアップ(73)
    lpq(64)
    プリンタ(58)
    restore(56)
    mkfs(55)
    mknod(54)  こんなの検索するんだ…
    sccs(53)
    プリント(50)
    lpstat(43)
    snmp(39)
    パーティション(39)
    
これ何? 系 … 誰か教えて。
    snoop(161)
    ipcs(112)
    fdisk(90)
    filec(66)
    ndd(43)
    showrev(52)
    ipconfig(53)
    ioscan(51)
    mpstat(44)
    substr(45)  perl?
    
入力が不適切系 … 全角アルファベットはないのですよ。半角に自動置換しようかしら。
    ls(196)  
    ユーザー(166)  ユーザならあるんですけど
    解凍(150)  展開で統一してます。改善予定
    ftp(127)
    cp(106)
    ln(90)
    ps(85)
    rm(54)
    リダイレクション(49)  その後「リダイレクト」で検索してくれただろうか
    df(48)
    クーロン(43)  これは改善予定
    mv(40)
    csh(35)
    
その他:
    select(91)
    bdf(88)
    atol(85)
    ファイル検索(70)
    logger(68)  需要あるのかなぁ。
    pdf(63)
    ファイル名変更(54)
    flock(54)
    htpasswd(53)  うーん
    samba(43)
    jar(42)  なぜ jar が
    gateway(41)
    access(36)


ちなみに検索にヒットしたキーワードのトップ20はこちら (リンクを
たどったものは除く。訪問者が入力したキーワードのみ)。
      tar(7512)
      grep(3832)
      find(3219)
      ftp(2502)
      ls(2490)
      vi(2370)
      cp(2215)
      ps(1799)
      rm(1773)
      chmod(1677)
      gzip(1528)
      cron(1511)
      ln(1368)
      mount(1352)
      crontab(1330)
      sed(1257)
      make(1188)
      awk(1150)
      mail(1034)
      date(1047)

No. 2094 # rosegarden 2001/08/07 (火) 03:49:29
>>2093 68user
『誰か教えて』の意味勘違いしているかもしれませんが…。
> これ何? 系…誰か教えて。
> snoop(161)
Solaris 標準コマンド tcpdump のような用途で使う Sniffer ですね。
> filec(66)
> ndd(43)
Solaris 標準コマンド。主に、TCP/IP 関係のデバイス
制御に使います。たとえば、TCP ヘッダのシーケンス番号
の生成法もこれで変えられたかとおもいます。
FreeBSD の sysctl に似た感じで使います(不正確ですが)。
> showrev(52)
Solaris の標準コマンド。pkg 管理用です。
showrev -p なんてすると、どんなパッチが当たっているかが
わかります。
> ipconfig(53)
これは多分 win のコマンドじゃないかな?
ifconfig に似た感じの情報を表示します。
このコマンドを ifconfig みたいにインタフェースの
変更用に使えないんでしょうか?
試したけど、うまくいかなかった。
> mpstat(44)
これは Solaris で man mpstat したら出てきましたよ。

No. 2095 # rosegarden 2001/08/07 (火) 03:51:25
>>2094 rosegarden
>> filec(66)
おっと、これは消し忘れていました。これは無視してください。

No. 2096 # スナフキン 2001/08/07 (火) 17:32:26
いつもお世話になっているので、少しでも協力できれば…

>>2093 68user
> fdisk(90)
これって、Linux系だけなのですか?
パーティーションテーブルを操作するコマンドですが…


>>2094 rosegarden
> ipconfig(53)
>変更用に使えないんでしょうか?
表示だけみたいですね。

「Win系はあくまでGUIなんでCUIインターフェースツールは、ホント
におまけ」みたいなポリシーのようです。

てか、あまり役に立ってなさそう…とほほ


ところで「UNIX の部屋」は、管理者向けの意味合いが大きいのでしょ
うか?それとも一般向け?>68userさん

No. 2097 # rosegarden 2001/08/08 (水) 00:37:40
>>2096 スナフキン

> > fdisk(90)
> これって、Linux系だけなのですか?
> パーティーションテーブルを操作するコマンドですが…

*BSD 系の OS ならあると思います。少なくとも、
FreeBSD/i386, OpenBSD/i386, NetBSD/i386 ならあります。
Solaris も x86 系のならあるかと思います。
今見たところ、SPARC 用の Solaris でも
マニュアルはインストールされていますね。

> >>2094 rosegarden
> > ipconfig(53)
> >変更用に使えないんでしょうか?
> 表示だけみたいですね。

そうですか、いや、自分のやり方が悪かったかと、
思っていたのですが、そういう仕様なんですね。

ありがとうございました。

>>2093 68user
それから、いま man したら ipcs は Solaris
にはあるようですね。

No. 2098 # whois 2001/08/09 (木) 07:10:29
IPアドレスとホスト名の説明中にある文章に関して

>しかしその逆の、FQDN はあるが IP アドレスはない、というマシンは
>存在しません。 ネットワークに接続されている全てのマシンには IP
>アドレスが付けられています。

FQDNはあってもIPアドレスがないマシンは存在します。UUCP接続の場合
にはネットワークに接続されていないのでIPアドレスを割当てる必要が
ないからです。

No. 2099 # iteb 2001/08/10 (金) 16:26:44
>これ何? 系 … 誰か教えて。
> ioscan(51)

HP-UXで使いますね。cd-romの装置番号を調べたり、周辺機器の
SCSI IDを調べたりするときに使いました。

参考:
  http://www.calpoly.edu/cgi-bin/man-cgi?ioscan

No. 2100 # 68user 2001/08/11 (土) 04:57:34
>>2094 rosegarden
> 『誰か教えて』の意味勘違いしているかもしれませんが…。
いえ、そういう意味です。みなさまどうもありがとうございます。

>>2096 スナフキン
> ところで「UNIX の部屋」は、管理者向けの意味合いが大きいのでしょ
> うか?それとも一般向け?
両方です。大学などの UNIX ならともかく、PC-UNIX では利用者=管理者な場
合がほとんどでしょうから、両方の知識を身に付ける必要があると思います。


>>2098 whois
> UUCP接続の場合にはネットワークに接続されていないのでIPアドレスを
> 割当てる必要がないからです。
なるほど。しかし、

    UUCP はメール・ニューズ限定のプロトコルである。UUCP の上には
    HTTP も POP も載せることができない。つまり、UUCP はトランス
    ポート層・ネットワーク層に相当し、TCP/IP とは並列関係にある。
        http://X68000.startshop.co.jp/~68user/net/net-1.html
    は、TCP/IP の初歩を解説しているページなので、そこで UUCP に
    言及することは混乱を招く。

と思うのですが、いかがでしょうか。UUCP は使ったことも設定したこともな
いので、間違っていたら指摘お願いします。

No. 2101 # iteb 2001/08/11 (土) 05:35:10
>>2100 68user
>UUCP はメール・ニューズ限定のプロトコルである。

現状はその通りなのですが、名前の通りファイルの転送も出来ます。
以前IIJでAnonymous UUCPでファイルの配布がされていたことが
ありました。1分30円だったかな。

「インターネットに接続されている全ての」ではなく、
「TCP/IPでインターネットに接続され…」であればとりあえず
矛盾は無くなりますが、ちょっと分かりにくいですね。

No. 2102 # よしあき [E-mail] 2001/08/14 (火) 19:18:44
皆さんはじめまして。実は今はじめてCGIをperlで作っていますが、フォームの内容を送信しようとすると以下のようなメッセージが出てきます。
このメッセージを出すことなくメールへの送信は可能でしょうか?
よろしくお願いします。

Sending C:\WINNT\blt9F.tmp to xxxx@xxx.ne.jp Subject:XXXXX Login name is info@xxxxx.com

No. 2103 # スナフキン 2001/08/15 (水) 00:23:56
>>2097 rosegarden
>そうですか、いや、自分のやり方が悪かったかと、
>思っていたのですが、そういう仕様なんですね。
いえ、仕様だと言い切るとまた語弊がありそうなんで濁しておきます(笑)
自分の場合は、あまりにも使えないコンソールなんで、Cygwin使ってます。
でも、うまく設定が出来ないんでDOSと半々かな(^^;

>>2100 68user
>両方の知識を身に付ける必要があると思います。
確かにそうですねぇ。自分はGUIは滅多に立ち上げずに殆どCUIのみで
利用していますが、最近の雑誌を見るとGUI上前提の記事が多いので、
実際にWindowsのような使われ方をしている人の比率は多いのかなぁ?
あ、もちろん複数の環境が有る場合ですが…

>>2102 よしあき
Windows環境でsendmail互換のMTAをperlから利用していると想定して
ですが…

多分そのsendmail互換のアプリが出しているメッセージなので、その
部分に以下のような記述をすれば回避できると思います。
(ん?コレはブラットJってやつかな?)

実際の記述部分が判らないので予想で書きますが、
1. open(MAIL, "sendmail 〜 コマンド |");
2. open(MAIL, "sendmail 〜 コマンド > nul");

「1」コマンドの標準出力を受け取るので、エラーチェックなどを検知する事もできます。
「2」標準出力を強制的にブラックホールに捨てます。

また、質問する時はもう少し詳しく環境とかを書きましょう。

No. 2104 # Asako 2001/08/15 (水) 17:44:18
初めまして。最近CGIの勉強を始めました。(^^)
今まで、フリーで配布されているCGIの改造をしたことは
あったのですが、自分で最初から書けるようになりたいと思っています。

わからないことがあるたびに、本を読んだり、インターネットで検索するのですが
68userさんのページが一番詳しく、わたしの知りたいことが書いてありました。
ありがとうございました。crypt関数とか、半角カナ・機種依存文字問題とか
うまくいかなくて、いきづまっていたので、大変参考になりました。
(日本語特有の問題は、翻訳本にはほとんどでてこないし (^^;)

これからUNIXのことも勉強したいと思っています。
これからもどうぞよろしくお願いします。

No. 2105 # ふくし [E-mail] 2001/08/18 (土) 12:08:21
Perl一般の質問ですみません。
さいきん Word が作った RTF をパースしないといけないハメになったんですが、
VBA はツライので Perl でやろうと思っています。
RTF::Parserというのを見つけてインストールはうまくいったんですが、
ドキュメントがまったくなく、お手上げです。
(TODO: Write a document とか書いてあるのがだいぶ前なので
    投げたのかも、、)
どなたか使い方をご存知の方リンクだけでもご存知の方教えてくださいませんか?

あと、他に Perl で RTF をパースした経験がある方
「やめたほうがいい」という結論に達した方などなど、
この問題に情報がある方はお寄せください。
また、RTF の規格についてわかりやすく書いているリンクなども、、。

あと、あまりにもこの件が掲示板の趣旨を逸脱するようでしたら
すみません、ツッコんでください。(^^;

スナフキンさん>
Cygwin 最高ですよね! 割り切って使うには最高です。
これと Meadow のおかげでやっと Windows と友達になれました。
ところで、1.1 をお使いですよね?
なぜか B20 ベースの解説サイトやソフトが多いのですが、
B20 にくらべて 1.1 は超超超超安定してていい感じです。
わたしはここでお世話になった技術で Apache をコンパイルして
CGI のテストも Windows でしてます!(^o^)

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2106 # ten 2001/08/20 (月) 18:16:34
Solaris 2.6 で、Sun Workshop 4.2 を使用しています。
事情により境界整列を全く行なわせない指定をしたいので、

$ cc -flags
(snip)
>-misalign 境界整列していないデータのロード/ストアを可能にするコードを生成

を指定しているのですが、意図した様な動作が得られません。
また、
>#program align foo, var
と指定してもダメです。

どうすれば良いのか御存知の方、いらっしゃいますか?

No. 2107 # 68user 2001/08/21 (火) 10:13:44
>>2106 ten
>#program align foo, var
とりあえず program じゃなくて pragma でしょう。あと、試して
ませんが書き方が怪しいのではないかと思います。こちらを参考に。
    http://docs.sun.com/htmlcoll/coll.674.1/euc-jp/CUG/accOptions.html#1407

>>2105 ふくし
> また、RTF の規格についてわかりやすく書いているリンクなども、、。
Rich Text Format は Microsoft が作った規格なので、Microsoft に
仕様書が存在するはずなのですが、見付けられませんでした。もしかしたら
今は別の団体が管理しているのかもしれません。

No. 2108 # CCIE [E-mail] 2001/08/24 (金) 14:53:30
こんちは、お初です。最近Perlはじめました。
ほかの言語はからっきし使えません(TT関西弁ならいけるけど。。。
で、Perlのプログラミングで質問させてもらいます。
テキストファイルで、↓こういうかんじ

        name  age  year
--------------------------
    CCIE   22   2001

みたいな感じのテキストがあって、そこから3行目だけを出力させたいのと
この場合だと22だけを取り出したいっていう2つのことがどうすれば
いいか今格闘中です。
たぶん正規表現かなーっとおもって
オライリーの正規表現見てますがさっぱりで・・・(^^;)
どなたか助言よろしくお願いしますm(__)m

No. 2109 # 68user 2001/08/24 (金) 20:43:26
>>2108 CCIE
> 3行目だけを出力させたい
自分で何行読んだかを数えます。
    $line = 1;
    open(IN, "file");
    while (<IN>){
        if ( $line == 3 ){
            print "これが 3行目の内容です: $_";
        }
        $line++;
    }

> 22だけを取り出したい
$_ に "CCIE 22 2001\n" が入っている状態で、
    ($name, $age, $year) = split(/\s+/, $_);
とすれば $age に '22' が入ります。

\s は空白・タブを表し、\s+ は1文字以上連続した空白・タブを表しますので、
      $_ を1文字以上連続した空白・タブで分割し、それぞれのフィールドを
      $name、$age、$year に代入
という意味になります。

あるいは
    ($name, $age, $year) =~ m/^(.*)\s+(\d+)\s+(\d+)$/;
という方法もあります。^ は行頭、\d は数字、$ は行末を表し、
括弧でくくった部分がそれぞれ $name、$age、$year に代入されます。

No. 2110 # /tk 2001/08/25 (土) 01:04:46
>>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+)$/;
では無いでしょうか?

No. 2111 # CCIE 2001/08/25 (土) 01:27:38
早々の返事ありがとうございますm(__)m
参考に勉強させてもらいます.
みなさんすごいですね.ってこういうのでつまづいているのは僕だけかな(TT
いまから,↓の$や()や\や+がごちゃごちゃしたものをゆっくり理解していきたいとおもいます.
実は今,これでいうと22の部分をTkのGIFgraphで表現しようと思ってるんです.
テキストファイルが定期的に書きかえられるのでグラフ化したいと思って.
それで,いま撃沈しているところを聞かせていただいたんです.
出きるだけ御迷惑をかけないように自分で努力したいと思いますが,また質問してしまうと思うのでそのときはよろしくお願いします.

No. 2112 # moz 2001/08/27 (月) 15:29:32
はじめまして。68userさんのページはとても勉強になります。時間があったら、全文を熟読したいと思います。(そんな時間ないかもしれませんが。)
それにしても、毎回いろいろな人からの質問に応えることのできる知識に、
少し圧倒されました。自分はまだまだ未熟者です。今後どーしてもわからないことがあったら、質問するかもしれませんので、そのときは、どうかよろしくお願いします。

No. 2113 # スナフキン 2001/08/28 (火) 03:14:24
ふと思ったのですが、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側でオーバーフローを気にしなくても良いならば、それでいい
のですが、どうも動作が判りません。
#それとも実装依存なのかな?

No. 2114 # 68user 2001/08/28 (火) 06:58:35
>>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 の実装がどうなっているかわかったら僕にも教えて下さい。

No. 2115 # 68user 2001/08/28 (火) 07:19:15
>>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 サーバもどきです。

No. 2116 # CCIE [E-mail] 2001/08/29 (水) 12:43:34
こんにちは。又お邪魔させてもらいました(^^;)
この前はありがとうございます。うまくできました\(^o^)/
今回は、Perl/Tkなんですがアドバイスよろしくお願いします。m(__)m
リストはこんな感じなんですが・・・
use Tk;

$mw = MainWindow->new;
$mw->title("gifgraph");

$can = $mw->Canvas(-width=400,

No. 2117 # CCIE [E-mail] 2001/08/29 (水) 12:52:25
すみません↓ 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文をはずせば今ある画像が表示されるんですが、なぜなんでしょうか?

No. 2118 # 68user 2001/08/29 (水) 16:35:02
>>2117 CCIE
Perl/Tk は久しくやってないので忘れてしまいましたが、
    $can->createImage(200,150,-image=>$gif);
    $mw->after(4000, \&change_image);
    MailLoop;
    exit;

    sub change_image {
          $gif が変わっていたら $can をいじる
    }
じゃないですかね。

No. 2119 # CCIE [E-mail] 2001/08/30 (木) 17:48:48
参考にさせていただきました。
少し手を加えてなんとか表示できました。それで、
GDモジュールとGIFgraphモジュールでgifを作って
for(;;){
    ・・・・・・
}
の中に入れたんですが
$my_graph=new GIFgraph::lines();
・・・・・
見たいな感じでGIFgraphを定義させました。
for文の外にこう言う定義は書いたらいいんですが、このモジュールの仕様?(バグ)で中に入れてどんどん作らないと更新されないんで中に書きました。
でもそうすると何度も定義するのでメモリがどんどん食われていくんです。メモリの制御を除いてもメモリが増えていってました。
前に定義したものが残っているのでそれを破棄するってことはできるんでしょうか?

No. 2120 # スナフキン 2001/08/30 (木) 20:15:47
>>2115 68user
そうですか実装依存ですか。それが判っただけでもOKです。
ありがとうございます。
perl側では、あまり意味がないという事になりますかね。

しばらくApache関連の情報も探しましたが、今の所該当する
情報は見つかりません。

わざわざ例題(cですよね?)まで書いてもらいましたが、
よく判りませんでした。m(_ _)m
cが解かればソースを見て何とかなるかもしれませんが、
まだ不勉強なので…

何か見つけたら報告します。

>>2105 ふくし
>ところで、1.1 をお使いですよね?
いえ、B20でした・・・って最近使っていないのがバレバレですが(笑)
自分は、DOS上では面倒な処理をする必要がある場合ぐらいしか
使ってません。普通は本物の環境で作業しています。
Cygwin でシンボリックリンクまで対応している事を知ったのも、
最近です(笑)

Prev< No. 2081〜2120> Next  [最新発言に戻る] [過去ログ一覧]