68user's page 掲示板

Prev< No. 1561〜1620> Next  [最新発言に戻る] [過去ログ一覧]
No. 1561 # rosegarden 2001/01/13 (土) 15:49:52
>>1560 debra
> >UX:crontab:警告:コマンドは /usr/bin/sh で実行されます.
> というメッセージが出てきてしまいます。
SHELL=/bin/sh とかいれてもだめですか?
/usr/bin/sh なんていう sh をもつシステムが思い当たらないので、
詳しいこと言えませんが。
man 5 crontab (*BSD, Linux)
あるいは
man -s 5 crontab (Solaris の場合)
すると書き方が大抵の場合かいてあります。
あるいは man crontab して SEE ALSO を見るとセクション番号が
分かるはずです。

No. 1562 # rosegarden 2001/01/13 (土) 15:52:34
4-stable のビルドしてますが、 make release の最中にまた
page fault 起こしました。make world しなきゃよかった。:-<
今回のは悪質で、backtrace がとれないです。
まあ、page fault なんで、もはや素人の出られる幕はありませんが。
% uname -v
FreeBSD 4.2-STABLE #0: Fri Jan 12 21:43:37 JST 2001
一回だけなので、年末のよりはましですが、私の環境で安定していたのは
FreeBSD 4.2-STABLE #0: Tue Jan 9 00:25:52 JST 2001
の奴ですね。これは、ちょうど、この前 68user さんが make world した
前後のと kernel はそんなに変わらないとおもいます。
当分の間 4-stable の make world は見合わせた方がいいです。

それから g++ も不安定ですね。ランダムに compiler internal error
が出ます。top コマンド見ているとメモリが少なくなった状況で
このエラーが出るようです。だから、libstdc++ とか groff の make
でこけることが多いです。しかも、失敗してから、もう一度 make
すると通ることもあるので、嫌になってきます。

次に多いのが、perl の library の make の失敗。これは原因がかなり
はっきりしていて、make world 始める前に /usr/obj 消しておくと
出食わしません。

# 三月に 4.3-RELEASE でるんだろうか?
# どうも 4.1-RELEASE よりは不安定になっている様な気がする。
# -current の方がよほど安定しているし ;-<

No. 1563 # yoshi [E-mail] 2001/01/14 (日) 16:11:26
お世話様です。
perl に ついてお伺いしたいのですが何方かご存知でしたら教えてください。
文字置換で下記のような物を実行するとエラー(ドキュメントにデータが無い)
とエラーが出て動作しません。どうも”ー”のキャラクターが原因のようです。
kk,mmの変数でtest変数文章を部分変換したいのですがココでつまずいています。

#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
$test = "ホームページの更新";
$kk = "ホームページ";
$mm = "掲示板";
$test =~ s/$kk/$mm/;
print $test;
-----------------------eof-------------------------

No. 1564 # 68user 2001/01/14 (日) 17:27:13
>>1562 rosegarden
最近の stable では、thread まわりのバグが fix されて、
mozilla5 が動くようになったそうですが、cvsup するのは
やめときます (笑)

>>1560 debra
>UX:crontab:警告:コマンドは /usr/bin/sh で実行されます.
「警告」っつーのが謎ですね。動作には影響ない?

>>1563 yoshi
CGI 経由でデバッグするのはやめましょう。まずはコマンドライン
からです。さすれば
    /z[y[W/: unmatched [] in regexp at a line 6.

    /ホームページ/: unmatched [] in regexp at a line 6.
というエラーが表示されることが確認できるでしょう。

というわけで「ホームページ」という文字列をダンプすると
    203 z 201 [ 203 200 203 y 201 [ 203
となります。「ー」の2バイト目が `[' と同じコードのため、
[] が正規表現として正しくない (']' で閉じていない) ということです。
対処法としては
    1. SJIS を使わない。スクリプトの文字コードを EUC にする。
    2. jperl を使う http://www.jp.FreeBSD.ORG/QandA/HTML/1218.html
です。他にも \Q〜\E で囲むだとか、quotemeta を使うなどの手は
ありますが、所詮小細工のレベルです。根本的には上のいずれかを
選びましょう。

No. 1565 # けんす 2001/01/15 (月) 00:55:54
ぽよぞーです。
さっそくやってみたのですが、、

http://www.kensu.com/zzztest/

できないっす、、なぜだ、、
HEADER.html、README.html置いてあるのに、
一覧には表示されてないし、、。(直指定で見れまぷ)
原因おわかりでしたらご教授くださいませ・・・

No. 1566 # けんす 2001/01/15 (月) 01:02:44
あ、すんません、追加で。
もしできたとして、
全部のディレクトリにこれ反映させるにはどうしたらいいですか??
mod_rewrite入ってるみたいなのでそれでできますか??
よろしくどうもー。

No. 1567 # yoshi 2001/01/15 (月) 01:18:41
>>1564 68user
スクリプトの文字コードを EUCにします。ありがとうございました

No. 1568 # けんす 2001/01/15 (月) 02:42:26
いろいろやってたら解決できました!

HeaderName /lib/HEADER.html
ReadmeName /lib/README.html

<FilesMatch "^(HEADER|README)\.html$">
        ForceType text/html
</FilesMatch>

http://www.kensu.com/.htaccess

強制的にtext/htmlにしたらうまくいきました。

全部のディレクトリに反映させるのも、上のとおり
ディレクトリも含めて指定したらすんなりできました。

img/,doc/など掘ってありますので見てみてください。

http://www.kensu.com/img/

何度も投稿して板汚してすんません、、>68userさん
ではでは

No. 1569 # 68user 2001/01/15 (月) 05:44:18
>>1568 けんす
> <FilesMatch "^(HEADER|README)\.html$">
> ForceType text/html
> </FilesMatch>
これは多分デフォルトで設定されていると思います (というか、
.html だから text/html になっているんじゃないかなぁ)。

> HeaderName /lib/HEADER.html
> ReadmeName /lib/README.html
書いてませんでしたが、HEADER/README は、一覧表示させたい
ディレクトリに置いて下さい。もちろん HEADER/README を
一ヶ所に集めたいなら今の設定で OK です。もしかして
> HEADER.html、README.html置いてあるのに、
同じディレクトリに置いてもダメでしたか?

あと質問なんですが、www.kensu.com の
    Server: Apache/1.3.12 (Unix) OCTO_3.0 PHP/4.0.0 FrontPage/4.0.4.3
OCTO って何ですか?

No. 1570 # E田 2001/01/15 (月) 18:55:05
すみません。
また教えて欲しいのですが、これは、Cの質問だと思うのですが、
もしかすると、関数自体が間違っているのかもしれないので、
どうか、教えてください。

下記のような関数を使いたいのです。
int write_sock( int sockfd, char *str )
{
        int write_len = 0;
        int count = 0;
        size_t bytes_sent = 0;
        char *buf;
        char str_buff[1024];

        sprintf( str_buff, "\r%s", str );
        count = strlen( str_buff );
        if( count <= 0 ){
        return( NG );
    }
        buf = str_buff;
        while( bytes_sent < count ){
                do{
                        write_len = write( sockfd, buf, count - bytes_sent );
                } while( ( write_len < 0 ) && ( errno == EINTR ) );
                if( write_len <= 0 ){
                        return( NG );
                }
                bytes_sent += write_len;
                buf += write_len;
        }
        return( OK );
}

この関数を呼び出して使うと、
        write_sock( sd, "test strings.\n" );
これはうまくいきました。
だから、ちゃんと動く関数かなと思っていました。
でも、こういう構造体を作って、
struct test_s {
        unsigned long test1;
        unsigned short test2;
        unsigned short test3;
        unsigned short test4;
        unsigned short test5;
} tes_s;
このようにデータをいれました。
    tes_s.test_1 = Data_1;
    tes_s.test_2 = Data_2;
    tes_s.test_3 = Data_3;
    tes_s.test_4 = Data_4;
    tes_s.test_5 = Data_5;
データはちゃんと入っているのを、printf()で確認しました。
この後、
    write_sock( sd, tes_s );
のように呼び出してみましたが、うまくいきませんでした。
char型のデータでないとソケットでは送れないので、なんとか
文字列にしようとしてみたのですが、文字列の連結として
構造体の各データをつなげる方法がうまくいきません。
    memcpy( tes_s, tes_s.test_1, sizeof(tes_s.test_1) );
    memcpy( &tes_s[4], tes_s.test_2, sizeof(tes_s.test_2) );
のようにやっても、tes_sの文字列に入っていないし、
    sprintf( tes_s[0], "%04d", tes_s.test_1 );
とやると、coreを出してとまってしまいました。
正しいやり方というのはあるのですか?
それとも、やっぱり関数が間違っているんですか?
どうかよろしくお願いします。

No. 1571 # けんす 2001/01/15 (月) 18:55:28
>>1569 68user
> これは多分デフォルトで設定されていると思います (というか、
> .html だから text/html になっているんじゃないかなぁ)。

> 同じディレクトリに置いてもダメでしたか?

http://apacheml.ecc.u-tokyo.ac.jp/cgi-bin/namazu.cgi?key=readme&submit=Search%21&whence=0&max=20&format=long&sort=score

なんかバグらしいです、、どうなんだろう、、。

> あと質問なんですが、www.kensu.com の
> Server: Apache/1.3.12 (Unix) OCTO_3.0 PHP/4.0.0 FrontPage/4.0.4.3
> OCTO って何ですか?

http://www.oc.to/ ここのサーバー借りてるのでちょっとわからないです、、

ついでに、、
ディレクトリーリストに表示されるアイコン集、みたいなページ
ご存知ないですか??
php,log,cgiとかが「?」じゃかっこわるいので・・・・

No. 1572 # rocky [E-mail] 2001/01/15 (月) 20:34:43
68USERさん、すばらしいサイトを公開なされていて本当に感謝しております。ネットワークプログラミングの基礎知識はWINDOWSのCHMファイルにコンパイルして手元に置いて大変参考にさせていただいております。(LWPメインの「WEBクライアントプログラミング」の百倍くらい助けていただいております。)

本日書き込みさせていただいたのは、質問と言うよりは要望なのですが、PERL5でHTTPクライアントを作る際、SSLで接続する方法を解説頂いたページを掲載して欲しいのです。お忙しいとは思いますがぜひ実現いただけましたら大変助かります。

それではお体にお気をつけて。
今後のご活躍を期待しております。

No. 1573 # CoreFighter 2001/01/15 (月) 23:08:50
        char TempBuf[10+5+5+5+5+1];

        /* TempBufを初期化 */
        memset(TempBuf, 0x00, sizeof(TempBuf));
        /* TempBufに設定 */
        sprintf(TempBuf, "%d%d%d%d%d",
                tes_s.test_1, tes_s.test_2, tes_s.test_3, tes_s.test_4, tes_s.test_5);

この時TempmBufの大きさは
longを整数にした時の最大桁数 + shortを整数にした時の最大桁数
shortを整数にした時の最大桁数 + shortを整数にした時の最大桁数
shortを整数にした時の最大桁数 + 改行(\r)
です。

No. 1574 # CoreFighter 2001/01/15 (月) 23:21:24
すいません。訂正です。
>この時TempmBufの大きさは
>longを整数にした時の最大桁数 + shortを整数にした時の最大桁数 +
>shortを整数にした時の最大桁数 + shortを整数にした時の最大桁数 +
>shortを整数にした時の最大桁数 + 改行(\r)
>です。
改行(\r)でなくてNULL文字(\0)でした。

No. 1575 # gixs 2001/01/16 (火) 03:00:49
> sprintf(TempBuf, "%d%d%d%d%d",
> tes_s.test_1, tes_s.test_2, tes_s.test_3, tes_s.test_4, tes_s.test_5);

この方針は、
>>1512 gixs
の最後で書いた、数値を文字列として渡す方法ですね。
(つまり、数値10を0x31 0x30のバイト列にしてしまう方法です)
受け手は、自前のパーサなりsscanf(3)なりで、パースして数値に戻します。

でも、"%d%d%d%d%d"ではパースできません。
ゼロ詰めで桁数を決め打ちするか、空白で区切るべきでしょう。

このように文字列で渡す方針が簡単なので、実用アプリならこうすべきですが、どうしても数値のままネットワーク上に流したいとのことなら、ネットワークバイトオーダに変換しながらmemcpy(3)(or memmove(3))します。

# 動かないコードでもいいように、疑似コード(エラー処理なし)。
# および、勝手に、uint32_t tes_s.test1; uint16_t tes_s.test2;ということにします。
char *p = buf;
uint32_t x32 = htons(tes_s.test1);
memcpy(p, &x32, sizeof(uint32_t));
p += sizeof(uint32_t);
uint16_t x16 = htons(tes_s.test2);
memcpy(p, &x16, sizeof(uint16_t));
p += sizeof(uint16_t);
...
write(sock, buf, p - buf);

受け手は、どういうbit数の数値がどう並んでいるかを知った上で、受けたバッファから数値を切り出していきます。

No. 1576 # gixs 2001/01/16 (火) 03:12:37
ひとつ訂正。
最初のhtons()はhtonl()。
# 掲示板への書き込みは難しいですね。他にもミスがあるかも。

No. 1577 # rererenore 2001/01/16 (火) 15:44:33
Perlで
                system関数||die"$!\n"||exit(0);
を使用すると「ファイル番号が違います」とエラーメッセージがでて以上終了を起こします。
こういったエラーの理由が分かるサイトなどありましたら教えて下さい。
またこのエラーの原因をご存知の方がいましたら原因を教えて下さい。
お願いします。

No. 1578 # たろ [E-mail] 2001/01/16 (火) 21:59:09
はじめまして。
perlで、メール本文の内容を分析し、
mimeまたは、プレーンテキストの初めの文書の最終行番号、
mimeのときにテキストがなければ、最初の本文の行番号というように
調べたいのですが、どうすればよいのかわからなくて困っています。
なにか便利なツール、パッケージなどあれば教えてください。
それか調べるポイントでもあれば教えてください。
どうかよろしくお願いします。

No. 1579 # 68user 2001/01/17 (水) 01:01:33
>>1553 CoreFighter
CoreFighter さんへ。質問に対する回答をもらっても、
何の反応も示さないなら、質問するのはご遠慮下さい。

>>1570 E田
> char型のデータでないとソケットでは送れないので
わかっておられるのかもしれませんが、それは write_sock が
そういう書き方になっているからで、本来はソケット経由で
バイナリデータを送れます。

>>1571 けんす
> なんかバグらしいです、、どうなんだろう、、。
なるほど。
# しかし素晴らしい検索能力ですね。バグだとは想像も
# しませんでした。

>> OCTO って何ですか?
> http://www.oc.to/ ここのサーバー借りてるので
ただ単にドメイン名入れてみただけなんでしょうか。

> ディレクトリーリストに表示されるアイコン集、みたいなページ
> ご存知ないですか??
ちろっと探してみましたが、見つかりませんでした。
20x22 だし、適当にでっち上げるのが簡単かもしれませんね。

>>1572 rocky
> PERL5でHTTPクライアントを作る際、SSLで
> 接続する方法を解説頂いたページを掲載して欲しいのです。
SSL のライブラリを使わず、ですか? そりゃまた難しそうだなぁ。
興味はあるので書きたいところですが、あまり期待しないで下さいね。

>>1577 rererenore
さようなら、断りなしにマルチポストする無礼なひと。

>>1578 たろ
「mimeまたは、プレーンテキスト」とか「mimeのときにテキストが
なければ」とかの条件がよく理解できませんでしたが、とりあえず
>>700 68user
が一番お手軽だと思います。

No. 1580 # rocky [E-mail] 2001/01/17 (水) 03:18:42
68USERさん、お返事ありがとうございます。
レンタルサーバーなのでMAKEを使うライブラリのインストールができなくて何でも自力でやっております。
SSLの件、気長にお待ちしておりますのでどうかよろしくお願い申し上げます。

No. 1581 # TT 2001/01/17 (水) 10:24:41
こちらのサイトで得た知識を、下記するところに記入いたしました。

http://www.tnetbbs.com/phorum/read.php?f=4&i=575&t=406

事後報告、かつ、つたない紹介となりましたことをお許しください。
とりいそぎ、ご挨拶まで。

No. 1582 # たろ 2001/01/17 (水) 13:16:57
>>1579 68user
お返事ありがとうございます。
>「mimeまたは、プレーンテキスト」とか「mimeのときにテキストが
> なければ」とかの条件がよく理解できませんでしたが、とりあえず
マルチパートかシングルパートか、でした。失礼しました。
マルチパートで最初のテキストタイプの箇所に文言を追加したいと
思っています。
マルチパートで、文書がないときには、テキストパートを追加します。
ネットワークの知識が少ないのが悲しいところです。

No. 1583 # たろ 2001/01/17 (水) 13:18:45
>>1582 たろ
>ネットワークの知識が少ないのが悲しいところです。
誤解を招くかもしれないので、補足します。もちろん自分のことです。

No. 1584 # arche 2001/01/17 (水) 13:54:46
はじめまして。
突然何? という感じかもしれませんが、このサイトは非常にすばらしいと思います。
自分はPerl屋なのですが、ここほど為になるサイトは今まで見たことがありません。
HTTPクライアントは特に参考になりました。
ありがとうございます。
すばらしい情報が得られる貴重なサイトですね。

あまりの感動につい書き込んでしまいました。
掲示板の趣旨に反していましたら、お詫び致します。

No. 1585 # E田 2001/01/17 (水) 15:26:56
みなさん、回答をありがとうございます。
やってみて、うまく格納できているみたいです。
今は、read()の方をうまくできていないので、ちゃんと
受け取りの構造体に格納できないので、これからなんとか
受け取り側で見れるようにします。
でも、うまくCを書けていなかったのがわかりました。
本当にありがとうございました。

No. 1586 # YAGI [E-mail] 2001/01/17 (水) 17:45:54
以前は、uptimeの質問に対してレスありがとうございました
また、質問があるのですが、
現在サーバ間(UNIX/AIX)でNISの設定をしようとしています。
今回、NISを設定してあるもののバージョンを上げるために、一度NISの設定
を解除して、バージョンをあげて、再設定しようと思っています。
一度試しで行なって見たのですが、Clientのほうで、Server側でマップを更新した後に、ログインができなくなってしまったのです。
(whoamiコマンドで反応がなくなってしまいます)
それで、一度NISを外しまして、再設定を行なった際に、
マップの更新後に、stopsrc -s ypbind
startsrc -s ypbind -a "ypsetme"
ypset (ServerのIPアドレス)
を行なったところ、無事に設定する事が出来ました。

ここで、質問なのですが、今度違う場所で同じ作業があるのですが、
マップ更新後に、whoamiコマンドで行けるか確認して
stopsrc…などのコマンドを打って設定する他にいい方法があるのでしょうか?

私的にはNISの解除の方法がおかしいのかなと思っています。
(1./etc/passwdを戻す、2.smitでNISを解除する)

よろしければ、皆様のご意見を頂きたく思います。
都合上レスが明日になるかもしれませんがよろしくお願い致します

No. 1587 # mak(spriggan [E-mail] 2001/01/17 (水) 18:52:58
初めまして。
現在UNIXでのSocket通信プログラムを書いているのですが
selectシステムコールとFD_ISSETマクロとの
関係がよくわからずにコードを書いていたところ
バグに悩まされています。

select()を使いタイマで割り込み動作を監視しながら
recv()で受信を行うというプログラムを書いています

FD_ZERO( &fdset );
FD_SET( m_Sockfd, &fdset );
while(recv_size != 0)
{
      work_fdset = fdset;

      ret = select( 64, &work_fdset, NULL, NULL, &time_out );

      if( ret == -1)
      {
            異常処理
      }
===============================
      割り込み監視
===============================
      
      if( FD_ISSET( m_Sockfd, &work_fdset ))
      {
            data_size = recv( m_Sockfd, (void*)(m_pData + m_DataSize))
      }

      m_DataSize += data_size;
      recv_size -= data_size;
}

ソースはだいたいこのような感じなのですが、
割り込み監視部分等でコネクションの切断
コネクションの再接続等を行っていると

select()の返り値は0でタイムアウトなのですが
FD_ISSET()マクロの方は返り値が真になってしまい
recv()の発行を行うけれども実際はデータはきておらず
recv()で処理がとまってしまい、割り込みの監視ができなくなって
しまうというようなバグが発生しています。
ならばselectとFD_ISSETの返り値が真である場合にのみ
recv()を発行すればよいと思うのですが
なぜこういうケースがでるのかわからなければ
信用し得る修正にならないので書きこみさせてもらいました。

過去ログなどを検索して調べてみましたが
自分なりのなっとくいく回答がえられませんでした。
よければこういうケースになる条件、回避方法等
お教えいただければと思います。

No. 1588 # mak(spriggan [E-mail] 2001/01/17 (水) 19:14:23
追記ですが、下記のプログラムは
1ポート1コネクションのプログラムです

No. 1589 # CoreFighter 2001/01/17 (水) 21:02:47
>>1553 CoreFighter
> CoreFighter さんへ。質問に対する回答をもらっても、
> 何の反応も示さないなら、質問するのはご遠慮下さい。
すいませんでした。以後気をつけます。

No. 1590 # mak(spriggan [E-mail] 2001/01/17 (水) 22:12:52
自己回答。先ほど質問を書きこんだものですが、
あれからいろいろサイトなどを再びまわって
間違いに気づきました。
お騒がせしました。
ようは
1ポート1コネクションなら
select()の第一引数に取得したソケット記述子+1を指定すれば
よかったんですね。

No. 1591 # 68user 2001/01/18 (木) 01:32:24
>>1590 mak(spriggan
> 1ポート1コネクションなら select()の第一引数に取得した
> ソケット記述子+1を指定すればよかったんですね。
ん〜、
    ret = select( 64, &work_fdset, NULL, NULL, &time_out );
であっても、事前に FD_ZERO(&fdset); FD_SET(m_Sockfd,&fdset);
してるんだから、select は m_Sockfd しかチェックしないと
思うんだけどなぁ…。

あと気になるのは、select が 0 を返したとき、FD_ISSET 得られる
値は有効な値なのかかどうか (select が 0 を返したときは FD_ISSET
してはいけないのではないか)、ってところですけど、どうなんでしょう。

>>1586 YAGI
> 現在サーバ間(UNIX/AIX)でNISの設定をしようとしています。
僕は NIS の設定をしたことがないので、ちょっとわかりません。

>>1582 たろ
> マルチパートかシングルパートか、でした。失礼しました。
なるほど。で、
>>700 68user
はどうでしたか。僕は multipart をばらすところまでしか
やってませんので、(必要かどうかわかりませんが) 編集後に
再構成できるのかはわかりません。
# まぁ、できなくはないと思いますけれど。

>>1584 arche
> 自分はPerl屋なのですが、ここほど為になるサイトは今まで
> 見たことがありません。
どもです。ですが、http://www.din.or.jp/~ohzaki/perl.htm くらい
役立つレベルになりたいものです。

No. 1592 # バス酔いで思わずコアダンプ 2001/01/18 (木) 05:15:41
変な名前ですいません。
SystemVと呼ばれるOSがあるそうなのですが、
'システムブイ'か、'システムファイブ'
どちらが正しい言い方なんでしょう?

No. 1593 # 68user 2001/01/18 (木) 09:08:12
>>1592 バス酔いで思わずコアダンプ
SystemIII の後継なので、システムファイブです。個人的には
話すときはシスブイと呼びますし、一応まわりには通じているようですが、
世間一般の人にシスブイと言ってわかってもらえるかは謎です。

# 検索すると http://www.system-v.org/ ってのが引っかかった。

No. 1594 # たろ 2001/01/18 (木) 11:38:15
>>1591 68user
>はどうでしたか。僕は multipart をばらすところまでしか
> やってませんので、(必要かどうかわかりませんが) 編集後に
> 再構成できるのかはわかりません。
どうもです。
MIME-TOOLSのexampleを見て、今手探り中です。
一度、multipart をばらして、対象のテキストパートから数えた行数を
取得後、multipartをばらしていない本文より行数を取ろうと思います。
ばらしたものよりの再構成は、(むずかしそうなので)とりあえず避けます。

No. 1595 # じゅじゅ [E-mail] 2001/01/18 (木) 15:09:55
今課題で、UNIXにApacheを入れ、フリーの掲示板をダウンロードして
とりつける課題をしています。
しかし、ウィンドウズで作られたperlのプログラムなので改行コード
の違いからか、エラーが出てInternal Server Error が出ます。
ダウンロードしたプログラムをperlで動かしてみても
Illegal character \015 (carriage return) at aska.cgi line 2.
(Maybe you didn't strip carriage returns after a network transfer?)
といった、エラーが出ます。どうしたらよいでしょう。

No. 1596 # クーロン 2001/01/18 (木) 17:16:12
cronを実行していたのですが、
マシンの時間を修正した後、cronが実行されなくなりました。
何が原因か、どうすれば実行するようになるのか、
どうか教えていただきたいです。

No. 1597 # クーロン 2001/01/18 (木) 17:20:53
cronを実行していたのですが、
マシンの時間を変更した後、
実行されなくなってしまいました。
どうしたらよいのでしょうか?

No. 1598 # 68user 2001/01/18 (木) 17:50:39
>>1595 じゅじゅ
> 今課題で、UNIXにApacheを入れ、フリーの掲示板を
> ダウンロードしてとりつける課題をしています。
最近どうして こんな変なのばっかりわいてくるんだろう。
マルチポストする人はさようなら。

>>1596 クーロン
> cronを実行していたのですが、
理由はわかりませんが、cron daemon を再起動するのがお手軽で
しょう。特にサーバマシンに言えますが、なるべく時刻は date や
ntpdate を使わず、xntpd などで設定しましょう。

No. 1599 # キチキチ 2001/01/18 (木) 18:17:11
はじめまして。
UNIXのことあんまり知らない初心者のものです。
先日TELNETが使えるレンタルサーバを借りたはいいけど、なんとその2週間後!
TELMETが禁止に、、、ってことで、ついでにCORNTABも禁止に。。。
こんな悲しいことってアリッ!!?TELNETが使えるから借りたのに!!!ガビーーン!
・・・ぐちっぽくなってゴメンなさい。
そんなこんなで、質問をさせてください。
TELNETが禁止のサーバで、CRONTABみたいに定期的にパールスクリプト実行できるテクニックってありますか?
よい方法を知っている方がいたら、なにとぞ教えてくださいませ☆

No. 1600 # じゅじゅ 2001/01/18 (木) 19:33:43
ごめんなさい、マルチポストの意味がよく
わかりません。とりあえず、ご迷惑をおかけしたようなので
他のところへ聞いてみたいと思います。
もう来ませんので許してください。
悪気は一つもなかったんですから。

No. 1601 # rererenore 2001/01/18 (木) 21:28:32
>>1577 rererenore
>さようなら、断りなしにマルチポストする無礼なひと。
>>1595 じゅじゅ
>> 今課題で、UNIXにApacheを入れ、フリーの掲示板を
>> ダウンロードしてとりつける課題をしています。
>最近どうして こんな変なのばっかりわいてくるんだろう。
>マルチポストする人はさようなら。

本当に困っているから複数のサイトで質問しているだけで何が無礼なのか分かりませんが。
全てのレスに対してお礼を書けば問題ないと思いますが?
何に対してむかつかれているのか全然分かりません。
嫌なら掲示板のどこかに書いておけばいいと思いますが使い方の方にすら書かれてもいないようですし。
あなたの方がよほど無礼だと思いますが。

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

No. 1602 # gixs 2001/01/18 (木) 21:56:09
>>1586 YAGI氏

最近、AIXもNISもごぶさたしていますが。
AIXのコツは、「なんでもsmit」、なので、

> 私的にはNISの解除の方法がおかしいのかなと思っています。
> (1./etc/passwdを戻す、2.smitでNISを解除する)

は、O.K.だと思います。
ただ、「/etc/passwdを戻す」はちょっと意味が取れません。
この「NISの解除」と言っているのは、「NISサーバをアップデートする前に、NISサーバを停止すること」の意味ですよね?
だとしたら、その間、/etc/passwdをいじる必要はありません。

NISサーバ側の作業は、
1. smitでNISサーバを停止
2. smitでNISサーバのアップデート
3. smitでNISサーバの起動

NISは(確か)statelessなので、クライアント側は何もせずにサーバに繋げると思います(ぼくなら、ypcat passwdで確認します)。
しかし、まあ、AIXは色々あるので、ダメならクライアント側(ypbind)もsmitで再起動するしかないでしょう。

# 余談ながら、通(つう)はsmitではなく、tty版のsmittyを使います。
# 走る男が見たいから、という理由でsmit(X版)を使い続ける人もいますが。
# 分からない人向けへの補足。
# smitは、AIXのGUI設定ツールなのですが、Windowsで砂時計がでるような状況で、
# 走る男のアニメーションがあります。
# しかも、設定が失敗すると、男がこけます。
# AIXがSolarisより優れているのは、これだけ。

No. 1603 # 68user 2001/01/18 (木) 22:15:59
>>1600 じゅじゅ
>>1601 rererenore
あなたがたに欠けているのは情報を共有しようという精神です。

あなたがたは自分一人情報を得て満足かもしれませんが、
少なくとも僕は、あなたがたを助けるため *だけ* に わざわざ
時間を割いて、検索したりソース見たりして回答しているわけでは
ありません。みんなで知恵を出しあって情報を共有するのが
掲示板を開設している第一の目的です。

たとえば僕は
>>1595 じゅじゅ
を読んで「それは ftp で ascii モードで転送してないからでしょう」と
(実際はもっと長文) 投稿しようとしましたが、その前に
    http://www.parkcity.ne.jp/~chaichan/qanda/qa539.htm?01-01-17-09-06
を見たところ、同じ質問が書いてあり、
    じゅじゅ [WriteDate : Thu Jan 18 16:56:31 2001]
まで書きこんでありました。

すでに解決していたことを、僕はいちいち細かく解説しようとして
いたわけで、全くの無駄な行為です。あなたがたは、他の掲示板の
全ての閲覧者に対して、よーいドンで競わせて、だれが早く回答
するか待っているようなものです。無礼な行為だとは思いませんか?

他の掲示板に書き込んで既に情報を得ているのに、親切な誰かが
>>1577 rererenore
を見て、いちから説明しようとするかもしれない。おかしいとは
おもいませんか?

本当に緊急のトラブルで困っているなら、「申し訳ありませんが、
緊急の事態なので、こことこことここに書き込みました」と
一言添えて、最後には全ての掲示板で得られた情報をまとめて、
こういう結果になりました、とサマリを書き込むべきでしょう。

> 全てのレスに対してお礼を書けば問題ないと思いますが?
ダメです。情報の共有化がされていない。情報が集まるのは
あなたのところだけ。

> 嫌なら掲示板のどこかに書いておけばいいと思いますが「使い方」の
> 方にすら書かれてもいないようですし。
こんなことは、ちょっと答える側の立場に立ってみればわかると
思いますが、いちいち書かないと理解できませんか。それとも
僕の主張自体が理解できませんか。

http://www.parkcity.ne.jp/~chaichan/qanda/qa579.htm?01-01-18-16-56
http://script.lovely.to/bbs/infolng.cgi?print+200101/01010026.txt
http://script.lovely.to/bbs/infolng.cgi?print+200101/01010016.txt

No. 1604 # 68user 2001/01/18 (木) 22:17:53
おっとリンクミス。
>>1603 68user
(実際はもっと長文) 投稿しようとしましたが、その前に
        http://www.parkcity.ne.jp/~chaichan/qanda/qa579.htm?01-01-18-16-56
を見たところ、同じ質問が書いてあり、

でした。

No. 1605 # rererenore 2001/01/18 (木) 22:33:47
>No. 1603 68user 2001/01/18 (木) 22:15:59
おっしゃる事は理解できますし、言われてみればもっともな考えだとは思います。
しかし、それはあなたがたのこういった世界に付いて詳しい方々の考え方であってわれわれの様な素人や、始めたばかりの人には情報の共有と言った概念は言われなければ無いと思います。
一言書かれていればこういう事態も避けられると思います。
今後は私も気を付けます。

No. 1606 # 68user 2001/01/18 (木) 22:37:01
>>1605 rererenore
そうですか。では、使い方のところに その旨書いて
おくことにします。

No. 1607 # H.Motoki [E-mail] 2001/01/18 (木) 23:42:51
はじめて発言します。
実はUNIXはまだ初心者ですが・・
下記のようなツール(C言語用ライブラリでも可)を探しています。
        ・コマンド型ツールでメール層送受信が可能なもの
            かつ、添付ファイルが遅れるもの
            かつ、Solarisで動作するもの
・・って、ありますか?

どなたか知っている方いましたら教えてください!
(できれば、メールアドレスに送付してくれれば、なお可)

No. 1608 # H.Motoki [E-mail] 2001/01/19 (金) 00:03:34
先ほどの発言にて誤字・脱字が多いので再送します。
下記のようなツール(C言語用ライブラリでも可)を探しています。
        ・コマンド型ツールでメール送受信が可能なもの
            かつ、添付ファイルが送れるもの
            かつ、Solarisで動作するもの
・・って、ありますか?

どなたか知っている方いましたら教えてください!
(できれば、メールアドレスに送付してくれれば、なお可)

No. 1609 # じゅじゅ 2001/01/19 (金) 00:46:42
この掲示板を利用しているみなさん、ほんとうに私事で
ご迷惑をおかけしました。実際私が投稿したことは
自分本位であり、みなさんの迷惑にしかならず
間違っていたことと理解しています。
しかし課題の締め切りが迫ってしまい、日々の勉強している
ことの範囲外の課題であったために、調べる時間も少なく
このような事態を引き起こしてしまいました。
本当にご迷惑をおかけしました。
しかし、管理者さんのこの掲示板の意図を知ることが
できたので自分ではとても勉強になりました。
知識不足、常識不足ですいませんでした。

結局掲示板の設置の方は、その改行コードの変更の仕方が
よくわからなかったので、あらかじめ改行コードが
UNIXで設定されているものをダウンロードし、
confファイルを手直しして、設置することができました。
ありがとうございました。

No. 1610 # rosegarden 2001/01/19 (金) 13:54:58
あえて、クロスポストに答える形で書き込みます。
ちょっと面白いこと(だから内容はマニア向け)があり、
それを書いてみたいので...。
>>1609 じゅじゅ
> 結局掲示板の設置の方は、その改行コードの変更の仕方が
> よくわからなかったので、
ftp での転送が悪かったからだろうという回答は出ているので、
直接改行コードの変更の話にしましょう。
改行コードを変えるのには、例えば、perl などで
% perl -pni.bak -e 's/^M$//' hoge.cgi
等とすれば良いのです。上で、^M は表現上 2 文字になっていますが、
この部分はコントロールキーを押しながら M を入力します。
ところが、困ったことにもろに打ち込むとリターンを打ったのと同じで、
これを打ち込めません。これは初心者の FAQ で、通常コントロール V
を打ってからコントロール M を打ちます。(以下、CTRL-M 等と書きます。)
すると文字通り ^M が打てるんですが、カスタマイズされている場合もあります。
あるいは、カスタマイズしたい場合もあるでしょう。
そう言った場合には stty(1) を使うんですが、
% stty -a
speed 9600 baud; 25 rows; 80 columns;
(中略)
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
                eol2 = <undef>; erase = ^H; intr = ^C; kill = ^U; lnext = ^V;
                min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
                stop = ^S; susp = ^Z; time = 0; werase = ^W;
となったときの lnext に「次の一文字を文字通り引用」(literal char???) する
キーが割り当ててあります。上の場合には、だから ^V です。このコマンドは ^H に
「前の文字の削除」を割り当てたい場合にも使います。通常 ~/.login に
stty erase ^H
とか
stty erase ^? (^? は DEL キー)
をいれておけば、それぞれ、CTRL-H や DEL に前の文字の削除を割り当てられます。
これも初心者の FAQ で DEL キーで前の文字を消すにはどうしたら良いのか?
なんて嫌なるくらいに聞かれます。答えは、上のようにすれば良いんですが、
問題はどうやって ^H だとか ^? をいれるかです。この答えも、ここまで
読んだ人なら明らかで、lchar キーを使えば言い訳ですね。上の場合すなわち ^V です。

ちなみに、上の perl のコマンド実行をする場合には tcsh だと ^M が ^J に
変わるので、ash なんかを起動してやった方が良いです。また、^V はコマンドラインや
ed あるいは vi なら有効ですが、emacsen の場合 CTRL-Q が lchar もどきの動作を
します(デフォルトなら)。

ここから本題にはいりますが、上の stty -a の出力は FreeBSD 4-stable のものです。
実は、5-current だと
speed 9600 baud; 25 rows; 80 columns;
(中略)
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
    eol2 = <undef>; erase = ^H; erase2 = ^H; intr = ^C; kill = ^U;
    lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q;
    status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W;
となります。良く見ると、erase2 というのがありますが、これは BS と DEL
両方に前の一文字削除を割り当てられるようにするためです。一般に、
% stty erase ^H ^?
なんてできませんから。こういった需要は多いはずなのに今までサポートされて
なかったんでしょうね。ちなみに、この erase2 については man stty しても
説明がみあたらず、-current の RELNOTES.TXT に書いてあります。
というわけで、FreeBSD には release ごとに結構な相違があります。

# これは昨日見つけて、どこかにこの発見(?)を書きたかった(笑)。

# ところで 3.x-RELEASE にはないが、4.x-RELEASE にはある
# du や df コマンドの -h (human friedly) オプションというのはご存知でしょうか?
# まあ、皆さん知っているでしょうね。この程度なら。

# 長くなりすみません。

No. 1611 # じゅじゅ 2001/01/19 (金) 16:04:30
>>rosegardenさん
教えてくださってありがとうございます。
残念ながら今すぐ自分ではまだ理解はできていませんが
いまから勉強して覚えたいとおもいます。
ありがとうございました。

No. 1612 # YAGI [E-mail] 2001/01/19 (金) 16:07:20
>gixs様
レスありがとうございます。
当人まだ、知識が乏しく本にsmitとsmittyが書いてあったりもするのですが
区別が分からずsmitでやってました^^;

「NISの解除」はその通りです。
私も、その手順で実際に行なってバージョンアップしたClientをもう一度
NISの再設定を行ってServerのマップをmakeし直すと
接続できなくなってしまうのです。
なお、smitのコマンド類はWinNTのTera Termより発行しています。
(接続できなくなってしまう→Tera TermでClientのサーバに接続できない)

以前にNISの設定を行なった作業がありまして、その時に障害を起こしてしまい(私はその時は作業はしていませんが^^;)、今回はそれをさけたいので色々と方法を模索しているところです。

一度、/etc/netsvc.confを作り
hosts=local,nisを作成してやって見たのですが
今回同様の現象となってしまいました。
また復旧は
stopsrc -s ypbind
startsrc -s ypbind -a "-ypsetme"
ypset (ServerのIP)を打ちました。

もし、これに関しても何か思い当たる点があれば、教えていただけたらうれしいです。
よろしくお願い致します

No. 1613 # ゆっきー [E-mail] 2001/01/19 (金) 16:44:36
こんにちは。
こんなことをお聞きするのは失礼かもしれませんが、
他になかったので失礼します。

よく企業のホームページなどで入力した数字をもとにシミュレーションをし、
計算結果を出力するようなページって多く有りますよね。
私もそのようなページをCGIで作製したいと思いいろいろな参考ページを見ましたが、
思うように解説ページが見つかりませんでした。
もし、入力した数値を計算し、結果を出力するようなサンプルを置いてあるページについて
何か思い当たる点があれば教えていただけないでしょうか。

本当にこんなしょうもない質問ですみません。
よろしくお願いします。

No. 1614 # rosegarden 2001/01/19 (金) 16:52:36
>>1610 rosegarden
まず訂正です。
> となったときの lnext に「次の一文字を文字通り引用」(literal char???) する
うえのは literal next と書こうとしたのでした。
> 読んだ人なら明らかで、lchar キーを使えば言い訳ですね。上の場合すなわち ^V です。
あと上のような、lchar というのはぜんぶ lnext に読み変えてください。

それから、
> ちなみに、この erase2 については man stty しても
> 説明がみあたらず、-current の RELNOTES.TXT に書いてあります。
このくだりを書いた時に見たのは 4-stable box の man stty でした。
5-current box だと説明はないことはないんですが、
> erase VERASE ERASE character
> erase2 VERASE2 ERASE2 character
> werase VWERASE WERASE character
等と言った感じで、表があるだけで、ちょっと不親切ですね。
この部分はあまり変化が無いですね。

http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/bin/stty/cchar.c
ここには説明がありますね。
> 1.10 Tue Nov 28 19:48:06 2000 UTC by jkh
と書いてあるので、つい最近ですね。
http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/release/texts/i386/RELNOTES.TXT?rev=1.190
こちらは RELNOTES.TXT です。

ところで、
http://www.FreeBSD.org/cgi/man.cgi?query=stty&apropos=0&sektion=1&manpath=FreeBSD+5.0-current&format=html
ここで見ることができますね。
http://www.FreeBSD.org/cgi/man.cgi
Plan9 とか Sun OS なんかのマニュアルもここから見ることができるんですね。
今まで、知らなかった。ライセンスはどうやってクリアしたんだろう?
FreeBSD 1.0-RELEASE とか 386BSD とかのマニュアルもありますね。
すごいですね。

No. 1615 # mak(spriggan) [E-mail] 2001/01/19 (金) 19:59:14
>>1591 68user
レスどもです。
ret = select( 64, &work_fdset, NULL, NULL, &time_out );
と指定していたので、ファイルディスクリプタ
0〜64までをチェックしかselectはチェックしていなかったので
selectはタイムアウトを返し、実際取得したファイルディスクリプタは
64を超えた数になっていたのでFD_ISSETは反応を返した。
というふうになっていた模様です。

ちなみに、ファイルディスクリプタの番号を
ここからここまでの番号しか取得しない。とか制限かける方法とか
ないのでしょうか?

No. 1616 # みかん(perlでソケットの質問してた方) 2001/01/19 (金) 22:41:30
レス遅くなってごめんなさい。
>>1525 68user
>2. 相手側がコネクションを切断したときも select は 1 を返します。
> その際、recv すると1バイトも読めず、0を返しているはずなのに

    コネクションが切断したときのselectの返り値、recvの返り値については
    このレスを見て初めて知りました。ありがとうございます。

>>1526 68user
>ついでに言っておくと、状況にもよりますが、select に
><> や read を使うのは不適切です。select で読み込み

    このサイトで紹介されているECHOサーバのように、「クライアントやサーバーとうま
    く接続できたかどうかを確認する」、というような形が正しいselectの使われ方だと
    考えてもいいですか?

    alarmを使う事でブロッキングを強引に回避するという方法がありますが、他に
    比較的OSに依存しない形でブロックを避ける手段はないでしょうか?

No. 1617 # gixs 2001/01/20 (土) 01:15:01
>>1615 mak(spriggan)氏
> 0〜64までをチェックしかselectはチェックしていなかったので
> selectはタイムアウトを返し、実際取得したファイルディスクリプタは
> 64を超えた数になっていたのでFD_ISSETは反応を返した。
> というふうになっていた模様です。

確かになりますね。
知りませんでした。
しかし、fd_setの戻り値をチェックするのは、select(2)が正数を返した時のみにしておいた方が安全でしょう(select(2)に正しい第1引数を渡したとしても、タイムアウト時にfd_setがゼロクリアされるかは分かりません。規格としてゼロクリアが決まっているならO.K.でしょうが、そこまでしてselect(2)の戻り値のチェックを省く理由も見付かりません)。
# 今回はselect(2)の戻り値チェックを省いたおかげで、第1引数のバグに気づいたわけですが。

> ちなみに、ファイルディスクリプタの番号を
> ここからここまでの番号しか取得しない。とか制限かける方法とか
> ないのでしょうか?

select(2)を呼ぶ時に、チェックすべきファイルディスクリプタの部分だけ、fd_setにマスクをかけますが(第1引数は効率の為)。
それとも、効率を気にしていますか?
確かに、非常に大きな番号のファイルディスクリプタ1つだけをチェックするとなると、無駄がありそうなことは否定しません。
それが気になるなら、poll(2)でしょうか。

No. 1618 # gixs 2001/01/20 (土) 01:33:19
>>1612 YAGI氏
# その場に行けば解決できるかもしれませんが、このやりとりでは、助けられる自信はありません。申し訳ないです。

> 当人まだ、知識が乏しく本にsmitとsmittyが書いてあったりもするのですが
> 区別が分からずsmitでやってました^^;

X以外でsmitを起動すると、tty版のsmittyと同じ動きなので、

> なお、smitのコマンド類はWinNTのTera Termより発行しています。

smitでもsmittyでも変わりありません。
# という事は、走る男を見ていないんですねえ。
# もしかして一度も見たことが無い、とかだったら不幸です。

> 私も、その手順で実際に行なってバージョンアップしたClientをもう一度
> NISの再設定を行ってServerのマップをmakeし直すと
> 接続できなくなってしまうのです。

うーむ、あまり他人の文章のケチをつけるのもなんですが、何をどういう順序でやったのか、いまいち不明です。
(改行の位置に読点があると考えてよいのでしょうか。
この手の説明は、時系列に並べた箇条書の方が分かりやすいと思います。)

No. 1619 # 68user 2001/01/20 (土) 04:46:57
>>1607 H.Motoki
> コマンド型ツールでメール層送受信が可能なもの
> かつ、添付ファイルが遅れるもの
> かつ、Solarisで動作するもの
僕は知りませんが、
    http://www.freebsd.org/cgi/ports.cgi?query=mime&stype=all&release=4.1-STABLE%2Fi386
の中を見ると、お望みのものっぽいのがありますので、
Solaris でコンパイルしてみてはどうでしょう。


>>1615 mak(spriggan)
> selectはタイムアウトを返し、実際取得したファイルディスクリプタは
> 64を超えた数になっていたのでFD_ISSETは反応を返した。
なるほど納得です。

> ちなみに、ファイルディスクリプタの番号を
> ここからここまでの番号しか取得しない。
ここから、は指定できません。ここまで、ってのは select の
第一引数ですね。多くの UNIX の実装では select が扱えるのは
1024 までのディスクリプタのようですから、この程度なら
僕はあまり気にしません。あと、FreeBSD 4.2-RELEAE の
select(2) には
    For historical reasons, select() will always examine
    the first 256 descriptors.
とありますので、あまり神経質になるほどのことでもないかも
しれません (し、そうでないかもしれません)。

No. 1620 # 68user 2001/01/20 (土) 04:49:52
繁盛しているのはいいけれど、返事が大変だなぁ。

>>1616 みかん(perlでソケットの質問してた方)
>> select に <> や read を使うのは不適切です。
> 「クライアントやサーバーとうまく接続できたかどうかを確認する」、
> というような形が正しいselectの
> 使われ方だと考えてもいいですか?
いいえ。タイムアウトも select の正しい使い方です。

サンプルプログラムを書いてみました。
    http://X68000.startshop.co.jp/~68user/tmp/select-sysread.pl
echo サーバと echo クライアントです。2つスクリプトを書くのが
面倒だったので、fork して 片方が echo サーバになり、もう片方は
echo クライアントとして動作するようにしました。

echo クライアントは echo サーバに接続し、文字列を送り、
それを受け取るだけです。echo サーバは select でソケットを
監視し、マルチスレッドサーバとして動作します。また、
クライアントが接続してから2秒経過したらタイムアウトとして
切断します。

で、これを動かすと、
    親:5000 でクライアント待ち
    子:localhost:5000 に接続します。
    親:127.0.0.1:1291 からの接続を受け付け
    子:送信メッセージ: HELLO (*1)
    親:127.0.0.1:1291 に反応あり
    親:127.0.0.1:1291 からメッセージ受信:HELLO
    親:127.0.0.1:1291 へメッセージ送信:Received HELLO
    子:受信メッセージ: Received HELLO (*2)
    子:5秒眠ります (*3)
    親:タイムアウトにより 127.0.0.1:1291 を切断 (*4)
    子:新しい接続 (*5)
    親:127.0.0.1:1292 からの接続を受け付け
    子:送信メッセージ: HELLO AGAIN (*6)
    親:127.0.0.1:1292 に反応あり
    子:5秒眠ります (*7)
となります。

最初は子が親に HELLO と送り (*1)、Received HELLO を受け
取ります (*2)。次に、子は5秒 sleep するので (*3)、親は
タイムアウトとして切断します (*4)。

次に、子は新しいソケットを生成し再度親に接続します (*5)。
子は親に HELLO AGAIN と送ります (*6)。ただし、今度は
メッセージの最後に改行コードを付けません。そして子は5秒
sleep します (*7)。するとここで親も子も動作が止まり、
永遠にデッドロックします。

なぜなら、親は子からのメッセージを
      $recv_message = <$sock>;
で読んでいるからです。改行コードが送られてこないと、
ここでブロックしてしまいますので、これでは select を
使う意味がありません。

今回は意図的に改行コードを含まない文字列を送りました。
これと同じことが、改行コード以前のデータが到着している
けれど、改行コードはパケットロスにより再送中、という
状況でも起こります。

というわけで、こういうときは
      sysread($sock, $recv_message, 100);
などとします。これなら、既に到着しているデータのみを
読みます。100バイト分のデータを読もうとしますが、もし
そのとき10バイト分のデータしか届いていなかったら、
そこで sysread から処理が戻り、select まで処理が
進み、正常にタイムアウト処理が行えます。

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