68user's page 掲示板

Prev< No. 1457〜1820> Next  [最新発言に戻る] [過去ログ一覧]
No. 1457 # merry 2000/12/13 (水) 15:47:22
こんにちは。
>>1441のmerryです。

68userさん
>>1444で質問に答えていただきありがとうございます。
rotateを調べてみたいと思います。

No. 1458 # masa 2000/12/13 (水) 16:06:17
こんにちは

UNIXでsendmailを使ってメールを送信するスクリプトを
Perlで作ろうと思っているのですが、
添付ファイルを付けることは可能なのでしょうか?

よろしくお願いします。

No. 1459 # M.K 2000/12/13 (水) 18:45:39
はじめまして。
crontabで毎日12:00にabcというスクリプトを
起動するといった設定を現在しているんですが、
これを最終金曜日だけ11:00起動でそれ以外は12:00に起動させるっていう
方法はあるんでしょうか?
教えていただきたく。

No. 1460 # 辻 義一 [E-mail] 2000/12/13 (水) 18:54:11
初めまして、辻 です。

HTTPでGETするプログラムを作成しています。HTTP クライアントを作ってみよう(4) を参考にさせていただいて、URLのエンコードしようとしています。

で、
/~user/hoge.cgi?fuga=ABC!"$ DEF+

/%7euser/hoge.cgi?fuga%3DABC%21%22%5C%24+DEF%20
と書かれています。自分で作ったプログラムで確かめてみると、
/%7euser/hoge.cgi?fuga%3dABC%21%22%24+DEF%2b
となりました。

また、URLのエンコードの対象はURL全てですか?それとも、CGIとかで使われる、?の後ろのみなのでしょうか?~が含まれるので、そんなことはないでしょうが。?そのものは、対象にならないようですし、ファイル名に@等がついてたりしたらどうなるのでしょうか?

ちなみに、
string yHttpGet::UrlEncode(string url)
{
    char buff[10];

    for(int i=0; i<url.length(); i++)
    {
        char c = url.at(i);

        if(((c <'0') || ('9' < c)) && ((c < 'a') || ('z' < c)) && ((c < 'A') || ('Z' < c)) && ('/' != c) && ('?' != c) && (' ' != c) && ('_' != c) && ('-' != c) && ('.' != c) && ('*' != c))
        {
            sprintf(buff, "%%%02x", c);
            url.replace(i, 1, buff);
        }
        else if(c == ' ')
        {
            url.replace(i, 1, "+");
        }
    }

    return url;
}
今のところ、このようなコードを書いています。

No. 1461 # 68user 2000/12/14 (木) 02:38:32
@1458 masa さん
> UNIXでsendmailを使ってメールを送信するスクリプトをPerlで作ろうと
> 思っているのですが、添付ファイルを付けることは可能なのでしょうか?
モジュールが使えるなら
    http://www.parkcity.ne.jp/~chaichan/qanda/qa425.htm?00-12-13-19-49
で、ふじさんが述べておられる方法がお勧めです。

@1459 M.K さん
> これを最終金曜日だけ11:00起動でそれ以外は12:00に起動させる
> っていう方法はあるんでしょうか?
少なくとも FreeBSD の crontab では、それを実現する簡単な
方法はありません。
    金曜日の 11:00
    毎日 12:00
という二つのエントリを作って、スクリプト内で
    最終金曜日で12時台なら、処理終了
    金曜日 && 最終金曜日でない && 11時台なら、処理終了
とするのがいいでしょう。

試してませんが、*BSD や GNU の date なら、
    date +%m … 現在の月を求める
    date -v+7d +%m … 一週間後の月を求める
を利用して
    0 11 * * 5 [ `date +%m`!=`date -v+7d +%m` ] && run-script
    0 12 * * * [ `date +%w'!='5' -o `date +%m`!=`date -v+7d +%m` ) ] && run-script
てなことが可能かもしれません (条件合ってるかな?)。

@1460 辻さん
foo.cgi?.... という GET 形式は、? 以降の文字が QUERY_STRING
(疑問符文字列) という名前で取り出せることからわかるように、
? はエンコードする必要はありません。疑問符であることが重要なのです。

> URLのエンコードの対象はURL全てですか?
全て、というかパス (/~user...) も含めてエンコードが必要です。
ただし、引数を渡したい場合は ? はエンコードしません。
でなくて、ファイル名の一部に ? が含まれる場合は
エンコードが必要です。

この掲示板の上にある発言フォームから文字を入力すると、
    Name … 68user
    Email … 68user@X68000.startshop.co.jp
    Message … ほげほげ
というような、対応関係が生まれます。このようなフォームで
生成されたデータを POST で送るとき、クライアントは
application/x-www-form-urlencoded という mime type で
送信しなければいけません。「HTTP クライアントを作ってみよう」
では手抜きして送ってませんが、本来は送るべきです。

で、GET の場合も同様に x-www-form-urlencoded 形式ならば
?foo=bar は ?foo=bar でよいです。= は URL エンコードしません。
しかし、そうではなく 「foo=bar」という引数を渡したいのなら
?foo%3Dbar となります。

というふうに、本当は /~user/hoge.cgi?fuga=ABC!"$ DEF+
という例だけでは、どこをエンコードすべきかは明確には
なりません。なので、あの解説はあまりよろしくないですね。

例えば hoge.cgi?foo=bar&def=ghi は、フォームに foo、
bar という要素があるならこのまま送ればよいですが、
foo=「bar&def=ghi」という意味なら foo=bar%26def%3Dghi」
とすべきです。どちらなのかは hoge.cgi?foo=bar&def=ghi
だけでは正確には判断できません。

No. 1462 # nac 2000/12/14 (木) 02:56:19
こんばんは、質問をした本人のレスが遅れて申し訳ありません。
(しかも、ソースまで見て頂いて恐縮です。)

>サーバアプリケーションの名前を教えてください。qpopper ですか?
一般のプロバイダで実験したので、わかりませんでした。
今度他の qmail, sendmail が動いているサーバーで実験してみます。

さて、私も手元にあった、qpopper3.0.2 のソースを眺めてみました。
(POP_TERMINATE は '.' buffer は buffer[MAXMSGLINELEN] (MAMSGLINELEN=1024) と宣言されています)

pop_sendline ( p, buffer )
POP * p;
char * buffer;
{
        char * bp;

        /*
          * Byte stuff lines that begin with the termination octet
          */
        if ( *buffer == POP_TERMINATE )
                (void)fputc ( POP_TERMINATE, p->output );

        /*
          * Terminate the string at a <NL> if one exists in the buffer
          */
        bp = index ( buffer, NEWLINE );
        if ( bp != NULL )
                *bp = 0;

        /*
          * Send the line to the client
          */
        (void) fputs ( buffer, p->output );

        /*
          * Put a <CR><NL> if a newline was removed from the buffer
          */
        if ( bp != NULL )
                (void) fputs ( "\r\n", p->output );
}

これをみると、やはり、\n がなければそのまま出力されて
しまうようですね。なんとなく、最初から、\n があることを
想定しているような感じも受けます。

No. 1463 # 辻 義一 [E-mail] 2000/12/14 (木) 19:31:21
68user さん、何度もありがとうございます。

私は、HTMLにある<A>タグでリンクされているHTMLをGETするプログラムを作っています。フォームに関わるCGIを作ってるわけではないのですが、リンク先が掲示板で?で引数を渡すリンクがある場合は、正しく渡して、取り出したいと考えています。

この場合、GETなのか、POSTなのかはわからないのですが。ブラウザがフォームからの結果以外で単純にリンクから、ページを読み込むときは、GETを使っているのだと思うので、GETでいいのですか?

で、よくわかっていないのですが。この場合も、URLを%とかでエンコードすべきかは判断できないのですか?ブラウザはやっているように思えるのですが。。。

No. 1464 # 68user 2000/12/15 (金) 01:03:53
行頭に「>>1461」または「@1461」と書くと、
>>1461 68user
というふうにリンクを張るようにしました。このとき、自動的に
リンク先の発言者の名前を補完します。「さん」付けは
なしですが、御了承下さい。

また、「>>1461 ほげほげ」と、数字の後に何かを書くと、
>>1461 ほげほげ
とリンクだけが張られ、名前の補完はされません。しかしスクリプトが
どんどん汚くなってきた…。brush up が必要だなぁ。


>>1463 辻 義一
> GETでいいのですか?
foo.cgi?hoge.. という形式なら GET でよいです。

要は、HTML を読んで <A HREF="foo.cgi?hoge=fuga">..</A> という
部分から foo.cgi?hoge=fuga という文字列を切り出した場合、どこを
エンコードすべきかということですよね。普通は何もエンコードせず
デコードせず、そのまま使えばいいと思います。アンカーに書く
URL は既に URL エンコードされているはずだからです。

それを無理にエンコードする必要はないですが、あえて行うならば
?=&%#/.-*_ 以外の記号と 0x80〜0xff はエンコード、でいいのでは
ないでしょうか。

>>1462 nac
> これをみると、やはり、\n がなければそのまま出力されて
> しまうようですね。
そうですね。POP3 サーバとしては、本文の行がどれだけ長くても、
改行は付加しないのが普通ではないかと思います。基本的にクライ
アントにデータを流すだけですから。

No. 1465 # rosegarden 2000/12/15 (金) 01:13:32
>それを無理にエンコードする必要はないですが、あえて行うならば
>?=&%#/.-*_ 以外の記号と 0x80〜0xff はエンコード、でいいのでは
>ないでしょうか。

html の文法的には
hoge.cgi?foo=1&bar=2

hoge.cgi?foo=1&amp;bar=2
と書くそうなので、そういった html の文字参照の変換は
必要になるかも知れません。例えば、&#36; とか…。

No. 1466 # 辻 義一 [E-mail] 2000/12/15 (金) 19:19:18
68user さん。

ありがとうございます、エンコードもデコードもしなくて良いと言うことですか。楽は楽なのですが。~もそのままで良いのかな。。今のプログラムでGETできているので、このままで行こうかと思います。

rosegarden さん。
その変換について走っていますが、、タグ内の文字列(""で囲まれた部分)までは適用しなくても良いと思うのですが。しているのも見たことありませんし。

No. 1467 # へにか [URL] 2000/12/15 (金) 22:15:11
>>1466 辻 義一さん
http://www.ne.jp/asahi/minazuki/bakera/html/opinion/ampersand
が、良くまとまっています。ご参考まで。

※ 僕のサイトは、どうしてたかなぁ・・・

No. 1468 # 68user 2000/12/17 (日) 02:25:49
たまたま、この件で大ハマリしてました (1時間悩んだ)。
    http://X68000.startshop.co.jp/~68user/tmp/amp.html
FreeBSD jman へのリンクを張ろうとしていたのですが、
上のリンクは
      mroff.cgi?.....&dir=jpman-4.2.0%2Fman&sect=8
と書いていますが、うまくいきません。よく知りませんが、&sec か
&sect という実体参照があるのでしょう。で、ブラウザ (FreeBSD+NN4.75)
がその文字に置き換えてリクエストを送るので、mroff.cgi 側に
こちらの意図したデータを渡せないのでしょう。

下のリンクは
      mroff.cgi?.....&amp;dir=jpman-4.2.0%2Fman&amp;sect=8
としているので OK です。

うちのページは何も考えず & のままにしていますね。いかんなぁ。

No. 1469 # へにか [URL] 2000/12/17 (日) 11:50:16
>>1467 (自己フォロー)
http://www.asahi-net.or.jp/%7Ejy3k-sm/i_net/url.html
にも、色々あります。

>>1468 68user
雨が降って、ひまなので、ついでに、調べてみました。
http://www.w3.org/TR/REC-html40/sgml/entities.html
によると、sectはsection signだそうです。
因みに、win98/IE4,NN4では§、bidi-mozilla(11-13)では%A1%F8
になりました。

No. 1470 # CoreFighter 2000/12/17 (日) 15:37:39
どうも、お世話になります。

最近、DNSの勉強していて、試しに立ててみようと
思っています。(Redhat Linux)
そこで、質問なんですけど、

・ダイヤルアップ接続でDNSサーバは動かせますか?
#もちろん一時的でいいんで‥

・DNSサーバで必要なものは何でしょうか? 気をつける点等..
#そういうHPを知っていたら教えて下さい。

よろしくお願いします。

No. 1471 # rosegarden 2000/12/17 (日) 15:57:46
>・DNSサーバで必要なものは何でしょうか? 気をつける点等..
>#そういうHPを知っていたら教えて下さい。

Linux-HOWTO で詳しく書いたものがありましたよ。

No. 1472 # rosegarden 2000/12/17 (日) 20:40:55
>>1471参照
ついでだったので、調べておきました。
http://www.linux.or.jp/JF/JFdocs/DNS-HOWTO.html
JF インストールすれば大抵入っています。

No. 1473 # CoreFighter 2000/12/17 (日) 23:12:35
rosegardenさん有難う御座います。

教えてくれたページを見て勉強します。
これからもよろしくお願いします。

No. 1474 # ぷに辻 2000/12/18 (月) 11:12:26
ども。お世話になってます。
管理モードのパスワードとかって、普通crypt()でハッシュしますよね。
でもDESの場合辞書アタックとかで簡単に破られちゃいますよね。
なのでmd5(md5sum)コマンドで「4fcf95ef97e1b7b248698bca83781902」みたいに
ハッシュしているのですが、これはcrypt()のDES、MD5($1$...$)と比べてどっちが
セキュリティ的によろしいのでしょうか。

No. 1475 # 辻 義一 [E-mail] 2000/12/18 (月) 19:29:03
URLエンコードの件ありがとうございました。

URIですか?に&をそのまま入れているページはたくさんあります。自分のホームページ上のCGIもそうだし、検索エンジンとかもそう。修正しようか迷っています。登録されている実体参照と重なっていないようなので、事実上大丈夫なのでしょうが。勉強になりました。これを、CGIに反映させるかは迷っているのですが。

現在作っているプログラムでは、色々動かして問題がないようですので、このままにしておきます。ブラウザでも正しくエンコードされていない、ページを開くときに支障があるぐらいですから、こちらで変換すれば上手く出来そうですが、ページの責任と言うことで。終わらせます。

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

今回は、

No. 1476 # SabaCurry [E-mail] 2000/12/18 (月) 23:14:44
こんちはーっす。
ず、ずいぶんまえに、ここに(そのときとはURL違うような気もするが)
永久保存版の過去ログなかったっすか?
久しぶりに見たくなって検索したのですが・・・・

最近行ってないけどtestボードまだ、げんきなのかなー・・・・

No. 1477 # gixs 2000/12/19 (火) 22:10:02
>>1474 ぷに辻
> 管理モードのパスワードとかって、普通crypt()でハッシュしますよね。
DESやmd5を1方向関数として使用している点は了解していると仮定します。
(余談1
ハッシュ関数と1方向関数は同義と言ってもよいですが、一応別物です。
1方向関数は(結果的に)ハッシュ関数ですが、逆は必ずしも真ではありません。
moduloはハッシュ関数ですが、出力から元の値が容易に推測可能なので良い1方向関数ではありません。)

> でもDESの場合辞書アタックとかで簡単に破られちゃいますよね。
辞書アタックと言っているのは、1方向関数でエンコードされたパスワードを奪われて、それに対して、しらみつぶしにパスワードを探索していると仮定します。
(余談2
暗号化パスワードと呼ぶ場合もありますが、復号化するわけではないので、誤用に近いと思っています。)
辞書アタックは、ワードを同じ1方向関数でエンコードして、マッチするものを探すことですから、同じ長さのパスワードなら、探索にかかるコストは、DESでもmd5でも大差無いと思います。
ただ、DESの場合、鍵長が56bitで、パスワード自体を鍵に使うことで(本来、暗号化アルゴリズムであるDESを)1方向関数にしているので、パスワードの長さが8文字に制限されます。
md5は(本来から1方向関数で)元データの長さに(現実的な)制限はないので、もっと長いパスワードが選べます。
この差は大きいですが、弱い(or 短い)パスワードを使っている限り、辞書アタックに対する強さは変わらないと思います。
(辞書アタック以外の探索法に対する強さは分かりません。
DESが簡単に破られる、と言っているのは、3年ぐらい前(もっと前?)のRSAコンテストで、約半年かかって破られたことを根拠にしていると思いますが、逆に言えば、未だ辞書アタックしか有効な手が無いという辺り、腐ってもDESと思わせるものもあります。)

No. 1478 # 68user 2000/12/20 (水) 00:59:20
>>1476 SabaCurry
> 永久保存版の過去ログなかったっすか?
はい、ありました。半永久保存版は1997年9月16日だけですが、
一応 1997/9/29〜1998/09/20 の分は保存してあります。

データはありながらも閲覧用 CGI スクリプトがどっか行っちゃって
見られない状態が続いてましたが、さきほど発掘してきました。

見てたら恥ずかしくなったので (笑)、URL はメールで送ります。
そのうちアナウンスもなくひっそりと公開します。

>>1474 ぷに辻
> crypt()のDES、MD5($1$...$)と比べてどっちがセキュリティ的に
> よろしいのでしょうか。
md5 より crypt+md5 の方が、salt という仕組みがある分
強固ではないかと思います。推測にしか過ぎませんが。

>>1477 gixs
> RSAコンテストで、約半年かかって破られたこと
専用ハードウェアを使うと、56bit DES 解読に要する時間は
22時間くらいでしたっけ。剣呑剣呑。

No. 1479 # 68user 2000/12/20 (水) 02:34:41
>>1478 68user
> URL はメールで送ります。
    From: MAILER-DAEMON@lala.v3.com (Mail Delivery System)
    <tetuya@i.am>: unknown user: "tetuya"
ということで、メールが送れませんでした。

No. 1480 # rosegarden 2000/12/20 (水) 02:39:01
>>1478 68user さん
>md5 より crypt+md5 の方が、salt という仕組みがある分
>強固ではないかと思います。推測にしか過ぎませんが。

そう言えば、perl スクリプトなどから crypt 使うと FreeBSD の最近の
RELEASE では DES で決めうちになっていることが多いようです。
ことに 4.1.1-RELEASE 以降の暗号解禁リリースの話です。
無論 DES 入れなければ、MD5 ですが。
システム全体では、切替え用のライブラリ関数もあって
DES と MD5 を切替えて使えるのに
perl が FreeBSD の切替えメカニズムに追従できていないようなんです。
それともできるのかな?ご存知の方いたらスクリプトレベルでの
切替え法を教わりたいです。

断定はしませんが、ソースをちょっと見た印象として、
-current は、login.conf で切替えられて、
デフォルトは MD5 です。今の所。4-stable は DES 入れると
有無を言わさず DES みたいですね。

No. 1481 # rosegarden 2000/12/20 (水) 02:43:57
>>1480 参照
>ことに 4.1.1-RELEASE 以降の暗号解禁リリースの話です。
正確にはDES が気軽に使えるようになったのは 4.0-RELEASE からですね。

No. 1482 # 68user 2000/12/20 (水) 02:55:43
>>1480 rosegarden
> システム全体では、切替え用のライブラリ関数もあって
> DES と MD5 を切替えて使えるのに perl が FreeBSD の
> 切替えメカニズムに追従できていないようなんです。
あ、そうなんですか。全然知りませんでした。
    /usr/lib/libcrypt* -> libscript*
というリンクなら MD5、
    /usr/lib/libcrypt* -> libdescript*
なら DES、くらいの切り替え方法しかないのかと思ってました。

4.2-BETA (make world しなきゃな〜) のソースを見た限りでは
よくわからなかったのですが、切り替え用ライブラリ関数とは
どれのことでしょうか?

No. 1483 # rosegarden 2000/12/20 (水) 03:03:40
>>1480 参照
>今の所。4-stable は DES 入れると有無を言わさず DES みたいですね。
ちょっと調べて見たら、意外に以前のバージョンで変更されていますね。
知らなかった。

green 2000/08/21 19:15:54 PDT

    Modified files:
(略)
        usr.bin/passwd local_passwd.c
        usr.sbin/pw Makefile pw_user.c
    Log:
    Add working and easy crypt(3)-switching. Yes, we need a whole new API
    for crypt(3) by now. In any case:
    
    Add crypt_set_format(3) + documentation to -lcrypt.
    Add login_setcryptfmt(3) + documentation to -lutil.
    Support for switching crypt formats in passwd(8).
    Support for switching crypt formats in pw(8).
    
    The simple synopsis is:
    edit login.conf; add a passwd_format field set to "des" or "md5"; go nuts :)
    
    Reviewed by: peter

ちなみに RELENG_4 だと変更のタイムスタンプは 2000/09/20 04:19:56 PDT
見たいですね。ちょうど、4.1.1-RELEASE のでる前後ですね。

>>1482 68user さん
>4.2-BETA (make world しなきゃな〜) のソースを見た限りでは
>よくわからなかったのですが、切り替え用ライブラリ関数とは
>どれのことでしょうか?
答えは上の commitlog を御覧ください。crypt_set_format ですね。

No. 1484 # SabaCurry [E-mail] 2000/12/20 (水) 07:40:04
失礼しました。転送メールがうまくいってない(?除名された?
みたいなので

よければ、こちらの方にURLを教えていただけないでしょうか?

久々にセガの過去ログなど見て、懐かしさにひたってしまいました。

No. 1485 # ぷに辻 2000/12/20 (水) 10:34:25
>>1477 gixs
>>1478 68user
gixsさん、68userさんありがとうございました。
> md5 より crypt+md5 の方が、salt という仕組みがある分
> 強固ではないかと思います。推測にしか過ぎませんが。

なるほど。では全部のスクリプトcrypt+md5に変えようと思います。

# gixsさんのは難しすぎて僕には分かりませんでした(汗)

No. 1486 # gixs 2000/12/20 (水) 20:42:12
> # gixsさんのは難しすぎて僕には分かりませんでした(汗)
説明する側の落度です。精進します。

>> md5 より crypt+md5 の方が、salt という仕組みがある分
>> 強固ではないかと思います。推測にしか過ぎませんが。
正しいと思います。
下のぼくの(分かりにくい)説明は、crypt+des vs. crypt+md5の話です。
結論は、パスワード長が同じなら辞書アタックに対する強度に差はないだろう、ということです。
saltありなしに関する余談は・・・、また分からないと言われるのが恐いので止めます。

No. 1487 # 68user 2000/12/21 (木) 01:41:19
>>1483 rosegarden
> システム全体では、切替え用のライブラリ関数もあって
なるほど。crypt(3) の切り替えではなく、passwd(1)/pw(1) で
使用される crypt ライブラリのフレームワークが追加された
ということですね。

> perl が FreeBSD の切替えメカニズムに追従できていないようなんです。
> それともできるのかな?
perl も libutil 使えばいいのにってことでしょうか。
でも #ifdef __FreeBSD__ を埋めこむようなものなので
(埋めこまないけど、意味としては同じ)、仕組みとしては
美しくないですねぇ。

ここらへんのもどかしさが
    Yes, we need a whole new API for crypt(3) by now.
と言わせるのでしょうか。

> スクリプトレベルでの切替え法を教わりたいです。
安直ですが、MD5 っぽい salt を渡すのはどうでしょう。
    % perl -e 'print crypt("secret","salt")."\n"'
    saHW9GdxihkGQ (DES)
    % perl -e 'print crypt("secret","\$1\$salt\$")."\n"'
    $1$salt$ez2vlPGdaLYkJam5pWs/Y1 (MD5)

>>1484 SabaCurry
> よければ、こちらの方にURLを教えていただけないでしょうか?
はい、後ほど送ります。

No. 1488 # Qさいとう [E-mail] 2000/12/21 (木) 16:23:39
マルチプロセスがよく分かっていませんので お願いします ...
今fork関数を使い,二つのプロセス, 1)表示画面にイヴェントが発生したら処理するプロセスと 2)時間監視を行っているプロセス  を作成しました. 2)は,ある時間の条件でXtOpenDisplayでメッセージ画面が表示し,OKボタンが押させるか画面右上のXボタンが押されると,メッセージ画面が消えます.しかし,メッセージ画面が複数個,表示されるのに,一画面を消去するだけで,全てのメーッセージ画面が消去されてしまいます. その為,複数プロセスにしよう ー 3つのメッセージ画面が表示されたら,3つのプロセスが
動いている − フ゜ロク゛ラムを作成中なのですが,3つ出力されればいいのに6つ(3つx2回)出力されたり,.... 何か簡単に作成できる方法はないでしょうか? execl命令などを使わずに簡単にできませんでしょうか.

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

No. 1489 # rosegarden 2000/12/21 (木) 17:43:28
>>1487 68user さん
>安直ですが、MD5 っぽい salt を渡すのはどうでしょう
なるほど、salt をかえればいいんですね。言われて見れば、
確かにそうですね。もっとも、言われるまでは気が付きませんでしたが。
どうもありがとうございました。

No. 1490 # 68user 2000/12/21 (木) 21:47:15
>>1488 Qさいとう
> 今fork関数を使い,二つのプロセス,
>  1)表示画面にイヴェントが発生したら処理するプロセスと
>  2) 時間監視を行っているプロセス
> を作成しました.
X サーバとの通信の実態は、ソケット経由でのデータのやりとりです。
大抵は (同一ホスト内なら) /tmp/.X11-unix/X0 経由です。
# つまり UNIX ドメインソケットを使う。

で、ソケットを作成したあと fork して、複数のプロセスが
ソケット共有するのは多分うまくいかないでしょう。
# そういう構成であるとは書いてありませんので推測ですが。

クライアント→サーバは OK かもしれませんが、サーバ→
クライアントのデータは親プロセスか子プロセスのどちらに
渡るかが決まっていないからです。

というわけで、そもそも構成がまずいと思います。1プロセスで
できませんか? Xt は知らないのですが、何かコールバック関数を
登録できる仕組みがあると思います。

仮に複数プロセスでやるとしても、X サーバと接続する前に
fork して、片方は X サーバとの通信、もう片方は監視などと
役割分担し、両プロセスの間はパイプやシグナルやソケット経由で
やりとりすべきでしょう。

>>1487 68user
>> よければ、こちらの方にURLを教えていただけないでしょうか?
> はい、後ほど送ります。
あ、まだ送ってなかったかもしれない。今日明日はちょっと
無理かもしれないので、すいませんが気長にお待ちくださいませ。

No. 1491 # 酒井 [E-mail] 2000/12/22 (金) 17:53:48
「UNIXの部屋」で

telnet リモートホストにログインする  という項目がありました。


ここで 自動的にログインし、自動的にコマンドを実行するには sleep の項のサンプルを参照。
                (コマンド sleep *)

とありますが、sleepの項では、下記のようになってます。


                sleep 指定秒数だけ動作を止める
                5分間 (300秒) 動作停止するには

                % sleep 300

                とする。sleep コマンドは、スクリプトの中で使うことが多い。

                % ( echo username ; sleep 1 ; echo password ; sleep 1 ; echo ls ; sleep 1 ) | telnet foo.bar.com

                なんてこともできたりする。

                (日本語マニュアル sleep)


実際に自動的にログインし、自動的にコマンドを実行したい場合はどうすれがいいのでしょうか


誠に勝手なお願いですが、ぜひ教えてください。

No. 1492 # 68user 2000/12/23 (土) 14:13:45
>>1491 酒井
> 実際に自動的にログインし、自動的にコマンドを実行したい場合は
> どうすれがいいのでしょうか
そこに書いてある
    % ( echo ... sleep 1 ) | telnet foo.bar.com
ではダメだったのでしょうか。

まぁ普通は ssh や rsh を使いますね。
    http://X68000.startshop.co.jp/~68user/unix/pickup?keyword=rsh&target=command#rsh
    http://www.jp.FreeBSD.org/QandA/HTML/1576.html

No. 1493 # 68user 2000/12/23 (土) 15:20:34
古い話ですが
>>1380 book
> gcc -c share_test.cc
> ar cr libtestshare.so share_test.o
> ranlib libtestshare.so
> CC test_gcc.cc -L. -ltestshare
gcc に -g オプションを付ければいける、と fj で読んだような
読んでないような。

>>1484 SabaCurry
メールで送りました。

No. 1494 # CoreFighter 2000/12/30 (土) 23:28:20
BIOSの設定画面で、MPSってありますけど
Versionの1.1と1.4の違いってなんでしょうか?

No. 1495 # Abe [E-mail] 2000/12/31 (日) 04:58:45
ある日突然?起動音が出なくなり、サウンドはすべて聞えなくなりました。[リソースの競合に遭遇し、自己流で、[コントロールパネル]-[システム]-
デバイスマネージャー]より、「はてなマーク」のものを削除して、
[サウンド関連のデバイス]を手動設定変更し、競合を避けることができ、
デスクトップ右下にスピカーが表示され音が出るようになったのですが、
再起動するたびに、「PCI Universal Sirial Bus」の入手案内が表示され、キャンセルボタンを押してからでないと、正常に作動を開始しません。起動の度に案内画面が出ないようにするにはどうすればよいでしょうか?

No. 1496 # アイスクリーム [URL] 2001/01/03 (水) 08:34:43
    チャトって、どこですか???

No. 1497 # ふくし 2001/01/03 (水) 20:06:29
あけましておめでとうございます。本年もよろしくお願いします。
別のことをやっていて偶然発見したんですが、

------------------------------ foo
#! perl
use strict;

my $n = 17; # 普通の変数
print "---> $\$n\n"; # リファレンスしていきなりデリファレンス

------------------------------
% perl -w foo
Use of uninitialized value in concatenation (.) or string at foo line 5.
---> 17

結果は確かに出てるんだけど、なんかundefの変数を二重引用符に入れたときと同じ
警告メッセージが出ます。これはなぜでしょう?

No. 1498 # mm 2001/01/03 (水) 22:29:52
>結果は確かに出てるんだけど、
↓を試してみて下さい。
my $n = 17; # 普通の変数
$\ = '<OUTPUT RECODE SEPARATOR>';
print "---> $\$n\n"; # リファレンスしていきなりデリファレンス

↓こっちも
my $n = 17; # 普通の変数
print "---> ${\$n}\n"; # リファレンスしていきなりデリファレンス

No. 1499 # 68user 2001/01/04 (木) 16:53:48
>>1494 CoreFighter
> BIOSの設定画面で、MPSってありますけど
> Versionの1.1と1.4の違いってなんでしょうか
MultiProcessor Specification の略ですが、詳しいことはさっぱりです。
現状では ACPI に取って変わられたんじゃないかな。具体的なことは
intel のサイトあたりに仕様書が転がってるかもしれません。

No. 1500 # ふくし 2001/01/04 (木) 17:39:57
>mmさん
あー、、、(^^;;;;; すいませんでした。
どうもありがとうございます!

No. 1501 # E田 2001/01/04 (木) 17:43:36
UNIXで、C言語で、TCP/IPを使って、クライアント/サーバ(マルチクライアントがアクセスする。非ブロッキングという)プログラムをしています。
selectを使用して、特定の、クライアントが接続しているソケットのタイムアウトを知りたいのですが、その方法が、良くわかりません。
こちらの方が詳しいということなので、ぜひ教えてください。
お願いします。本を読んでも、良くわかりませんでした。

No. 1502 # 68user 2001/01/04 (木) 17:54:58
>>1501 E田
現状はどこまでわかっているんですか?

何もわからないなら、まずは
    http://X68000.startshop.co.jp/~68user/net/c-echo-1.html
を読んでください。で、ソケットを使えるようになると。

で、perl ですが、select の使い方はこんな感じ。イメージをつかんで下さい。
    http://X68000.startshop.co.jp/~68user/net/echo-4.html

んで、C での select(2) の使い方。
    http://home.jp.FreeBSD.ORG/cgi-bin/showmail/FreeBSD-users-jp/54916
    http://home.jp.FreeBSD.ORG/cgi-bin/showmail/FreeBSD-users-jp/54917

わからなければ、作ってるソースから余計な部分をそぎ落としたソースを
公開して、再度質問してください。

No. 1503 # inpaku 2001/01/04 (木) 20:50:44
こんにちは。ネットワークプログラミングについて質問があるのですが…。
現在、Debian Linuxをもちいて、簡単なプログラミングから練習している
のですが、いき詰まりました。
PF_PACKETをつかってデータリンクに直接データを渡したいのですが、
ethhdrのh_dest や h_sourceにどうやってMACアドレスを入れて良いか
解らなくなりました。IPアドレスでは、inet_ptonとかあったんですが、
MACアドレスの場合もあるのですか??
宜しくお願いします。

No. 1504 # 68user 2001/01/04 (木) 23:22:14
>>1503 inpaku
> 簡単なプログラミングから練習しているのですが、いき詰まりました。
ははぁ、「簡単なプログラミングから練習」で、いきなりデータリンク層ですか。
僕にはちょっと荷が重いなぁ。

確認ですが、非 TCP/UDP かつ 非 IP のデータを送りたいのですよね?

UNIX Magazine 2000年7月号「BSD をハックする - 齊藤明紀」で、
    - 非 IP のプロトコルを使うにはどうすればよいか
    - 送信する Ethernet パケットに含まれる MAC アドレスを自由に
        設定することはできるか
について、NetBSD での解説が書かれています。

また、「UNIX ネットワークプログラミング第2版 Vol.1」
    http://X68000.startshop.co.jp/~68user/net/link-book.html#8
では、データリンクへのアクセス手法として、
    - BSD の BPF (BSD Packet Filter)
    - SVR4 の DLPI (SVR4 Data Link Provider Interface)
    - Linux の SOCK_PACKET
の3つがあげられています。どうやらここらへんは OS により
API がまちまちらしいですね。実際、手元の FreeBSD 4.2-BETA
では (PF|AF|SOCK)_PACKET という定数は定義されていません。

で、この本によると Linux の SOCK_PACKET を使うなら
    fd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL));
とすると、データリンクからすべてのフレームを受けとれる
らしいです。

あと、tcpdump が使用している libpcap というライブラリが
上記3種の方法に対応しているようなので、参考になるかも
しれません。
# libpcap は読み出ししかできませんが、送信に対応させるのは
# それほど面倒ではないとか。

> IPアドレスでは、inet_ptonとかあったんですが、
> MACアドレスの場合もあるのですか??
BSD には libc に ether_aton とか ether_hostton てのがあります。
Linux はどうですか?

くぅ、面白い話題だけど、調べるのに一杯一杯だ。

No. 1505 # inpaku 2001/01/05 (金) 00:07:02
68userさんへ
親切にお答え下さって、ありがとうございます。
ether_aton とか ether_hostton ですか、探してみます。
実は僕もUNIX ネットワークプログラミング第2版 Vol.1を
持ってますが、はっきりいって、C言語すらおぼつかない僕
には辛いです(笑)
たしかにLinuxではSOCK_PACKETを使うと本には書いてあり
ましたが、Kernel2.2以降?からはPF_PACKETを使えと、man
ページに書いてあったものですから、それを使ってます。
また、libpcapのソースも落としましたが、書き換えるのは
僕には不可能でした(苦笑)
ところで、僕は何をしたかったのかというと、自分で任意の
プロトコルをつくってそれで通信させてみようということだ
ったんです。無謀とお思いでしょうが、やらなきゃならんの
です。卒業のために…。とにかくがんばってみます。
ありがとうございました。

No. 1506 # E田 2001/01/05 (金) 11:52:25
早速、回答してくださいまして、ありがとうございます。
どこまでわかっているか、ということなので書きますが、
ソケットの生成とかは、できています。
サンプルとかを真似して、クライアント/サーバで動かしてみました。
fork()で、マルチクライアントにもできています。
でも、select()を組み合わせると、よくわかりません。
動作は、教えてもらったページとかで、なんとなくわかるのですが、
それをCでやろうとすると、わからなくなります。
select[1]とかと書いて、タイムアウトの時間を指定してやると、
それをすぎても読み出せない時にはタイムアウトしたっていうことで
検出できるんですか?
よろしくお願いします。

No. 1507 # E田 2001/01/05 (金) 11:54:12
追伸です。
ソースとかは、まだ、ほとんど、サンプルとかのechoサーバとかなので、
書きませんでした。

No. 1508 # E田 2001/01/05 (金) 12:14:52
すみません、もう一つ質問です。
送信するデータで、データの最初に全データの長さが入っていて、
その次に、データのIDが入っていて、その後にデータの本文が
入っているというものを受信する時の方法についてなんですが、
それを読む時、最初のデータの長さとIDを読んで、その後で
データの本文を読みたいのですが、構造体みたいなのを用意して、
そこに格納しようと思っています。
データの長さはu_longで4byteで、
IDは、0x00100101(u_longで4byte)とかという番号で、
データの本文は、u_shortで2byte+longで4byte+char[8]です。
socketでの送信用のchar型からキャストしてみようと
しているんですが、最初の00がうまく行きません。
(送信する時のキャストはうまく行っています。受信する時は、
ちゃんと全部、もとのままのデータを受け取っています。)
これは、socketの扱い方の方のhton()とかでやらないと
いけないのですか?
それから、もしかすると、Cの方の書き方が下手糞なせいなのかも
しれないのですが、構造体に格納するのがうまく行かないので、
たとえばで良いので、もしも良かったら、例を教えてくれませんか?
お願いします。

No. 1509 # 68user 2001/01/05 (金) 12:56:19
> 最初の00がうまく行きません。
うまく行かないプログラムを (余計な部分は削った上で)
公開してください。

はい、C+select の超手抜きサンプル。バグありまくりですが
一応動きます。細部は参考にせず、おおまかな流れを見て下さい。

------------------
#include <stdio.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/uio.h>
#include <unistd.h>
#include <sys/param.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define BUF_LEN 256 /* バッファのサイズ */

int main( int argc , char *argv[]){
    int connected_socket[100];
    int listening_socket;
    struct sockaddr_in sin;
    int sock_optval = 1;
    int port = 5000;
    char buf[BUF_LEN];
    struct timeval waitval;
    fd_set fd;
    fd_set org_fd;
    int max_sock = 0;
                                                                /* リスニングソケットを作成 */
    listening_socket = socket(AF_INET,SOCK_STREAM,0);

                                                                /* ソケットオプション設定 */
    if ( setsockopt(listening_socket,SOL_SOCKET,SO_REUSEADDR,
                                    &sock_optval,sizeof(sock_optval)) == -1 ){
        perror("setsockopt");
        exit(1);
    }
                                                                /* アドレスファミリ・ポート番号・IPアドレス設定 */
    sin.sin_family = AF_INET;
    sin.sin_port = htons(port);
    sin.sin_addr.s_addr = htonl(INADDR_ANY);

    if ( bind(listening_socket,(struct sockaddr *)&sin,sizeof(sin)) < 0 ){
        perror("bind");
        exit(1);
    }

    if ( listen(listening_socket, SOMAXCONN) == -1 ){
        perror("listen");
        exit(1);
    }
    printf("ポート %d を見張ります。\n",port);

    waitval.tv_sec = 1;
    waitval.tv_usec = 0;

    FD_ZERO(&org_fd);
    FD_SET(listening_socket, &org_fd);
    max_sock = listening_socket;
        
    while (1){
        int i;
        struct hostent *peer_host;
        struct sockaddr_in peer_sin;

        memcpy(&fd, &org_fd, sizeof(org_fd));

        select(max_sock+1, &fd, NULL, NULL, &waitval);

        for ( i=0 ; i<=max_sock ; i++ ){
            if ( FD_ISSET(i, &fd) ){
                if ( i == listening_socket ){
                    int len;
                    len = sizeof sin;
                    max_sock++;
                    printf("connected_socket[%d]\n",max_sock);
                    connected_socket[max_sock] =
                        accept(listening_socket, (struct sockaddr *)&sin, &len);

                    if ( connected_socket[max_sock] == -1 ){
                        perror("accept failed.\n");
                    }
                        
                    len = sizeof(peer_sin);
                    getpeername(connected_socket[max_sock], (struct sockaddr *)&peer_sin,&len);
                        
                    peer_host = gethostbyaddr((char *)&peer_sin.sin_addr.s_addr,
                                                                        sizeof(peer_sin.sin_addr),AF_INET);
                        
                    printf("接続: %s [%s] ポート %d\n",
                                  peer_host->h_name,
                                  inet_ntoa(peer_sin.sin_addr),
                                  ntohs(peer_sin.sin_port)
                                  );
                    FD_SET(max_sock, &org_fd);

                } else {
                    int read_size;
                    read_size = read(connected_socket[i], buf, sizeof(buf)-1);
                    if ( read_size == 0 ){
                        printf("接続が切れました。引き続きポート %d を見張ります。\n",port);
                        close(connected_socket[i]);
                        FD_CLR(i, &org_fd);
                    } else {
                        printf("メッセージ: %s",buf);
                        write(connected_socket[i],buf,strlen(buf));
                    }
                }
            }
        }
    }
    close(listening_socket);
    return 0;
}

No. 1510 # E田 2001/01/05 (金) 16:07:43
もう、お返事を頂けたとは! すごいです。
ありがとうございます。
参考にして、勉強してみます。
それと、構造体に入れるところのプログラムを、そこのところだけ書きます。

テスト用に、こういう構造体を作りました。
struct test_s{
    u_long test_1;
    u_short test_2;
    u_short test_3;
    u_short test_4;
    u_short test_5;
};
struct test_s tes;

それから、読み込むところのプログラムです。

    while(1){
        int len;
        char *ptr;
        char buf1[256];

        len = read( newsockfd, buf1, sizeof( buf1 ));
        buf1[len] = '\0';
        if( len > 0 ){
            if( strncmp( buf1, "end", 3 ) == 0 ){
                break;
            }
            ptr = buf1;

            tes.test_1 = (int)ptr[0];
            tes.test_2 = (atoi)ptr[1];
            tes.test_3 = (atol)ptr[2];
            tes.test_4 = (int)ptr[3];
            tes.test_5 = (int)ptr[4];
        }
    }

こんな感じです。

test_2以降に入る予定のデータは、みんな同じのを送っていますけど、
どれも、変な感じになってしまいます。
(ここには書いていないですけど、printf()で表示させています。)
構造体とかポインタとか、意味は勉強したんですが、
書くのは初めてなので、そのせいかなとも思うんですが、
キャストのやり方が違うのかもしれません。
いろいろやっているうちに、自分ではわからなくなってしまいました。
ほんとうにすみませんけれども、教えてください。
お願いします。

No. 1511 # rosegarden 2001/01/06 (土) 00:15:40
>>E田
>キャストのやり方が違うのかもしれません。
確かにおかしな部分はあるようです。もっとも、それがどの程度
全体に影響を及ぼしているかは分かりません。参考程度と言うことで。
まず、次のようなサンプルプログラムを用意します。

#include <stdio.h>
#include <string.h>

struct test_s {
    unsigned long test1;
    unsigned short test2;
    unsigned short test3;
    unsigned short test4;
    unsigned short test5;
} tes_s;

int
main(int argc, char *argv[])
{
    char buff[256];
    char *ptr;

    buff[0] = '\x12'; buff[1] = '\x34'; buff[2] = '\x56'; buff[3] = '\x78';
    buff[4] = '\x0'; buff[5] = '\x1';
    buff[6] = '\x0'; buff[7] = '\x2';
    buff[8] = '\x0'; buff[9] = '\x3';
    buff[10] = '\x0'; buff[11] = '\x4';

    ptr = buff;
    tes_s.test1 = ((unsigned long *)ptr)[0];
    tes_s.test2 = ((unsigned short *)ptr)[1];
    tes_s.test3 = ((unsigned short *)ptr)[2];
    tes_s.test4 = ((unsigned short *)ptr)[3];
    tes_s.test5 = ((unsigned short *)ptr)[4];

    return 0;
}

なおキャストの仕方がE田さんのとは違いますが、
E田さんの意図を汲むのなら上の方がおそらく良いでしょう。

これをデバッガで検査してみました。最後の手前で break させて
変数を見ます。

(gdb) x/100bx ptr
0xbfbfd6f0: 0x12 0x34 0x56 0x78 0x00 0x01 0x00 0x02
0xbfbfd6f8: 0x00 0x03 0x00 0x04 0x44 0xd7 0xbf 0xbf

これを見る限りデータはちゃんとセットされています。

(gdb) p/x tes_s.test1
$1 = 0x78563412

最初の 4 バイトはひっくり返っています。もしも、動作させる予定の
計算機の CPU が little endian なら memcpy などを使って 1byte ずつ
コピーした方が無難です。ただし、SPARC とか m68k なら気にしなくて良い
場合もあります。(ただし、完璧に機種依存になるので、その旨コメントで
明記した方が良いでしょう。)

(gdb) p/x tes_s.test2
$2 = 0x7856
(gdb) p/x tes_s.test3
$3 = 0x100
(gdb) p/x tes_s.test4
$4 = 0x200
(gdb) p/x tes_s.test5
$5 = 0x0
(gdb) q

次からは、ずれていますね。例えば、tes_s.test2 = ((unsigned short*)ptr)[1]
というのは最初から、short が並んでいるとして、最初から 2 番目のものを
とりだすことになるので 配列先頭からの 3 バイト目と 4 バイト目をとりだ
します。更に、バイトオーダが絡んで来るので、話しは複雑になります。
機種に依存して良いのなら、

union hoge {
            struct some_struct {
              ....
            } hogehoge;
            char buff[256];
}

などとして一気にコピーする手法が典型的ですが、バイトオーダに悩まされま
す。これをすると SPARC では動くが intel 系の CPU では動かない、あるい
はその逆のプログラムになります。

まるで、馬鹿みたいに思えるかも知れませんが、memcpy で地道に値のコピー
を行った方が良いです。

繰り返しますが、これをなおしたとしても、
E田さんの問題の解決になるとは限りませんので、あらかじめおふくみおき下
さい。あくまでも気がついた範囲ではと言う話です。

No. 1512 # gixs 2001/01/06 (土) 01:05:05
>>1509 68user
68userさんはご存知かもしれませんが、他の人がはまらないように。
Linuxのselect(2)は、戻った時、第5引数の値が残り時間を示して戻ってくる(タイムアウトしたら値はゼロになる)ので、waitvalの値の設定はwhileループ内でやる必要があります(manにも書いてあります)。

> コピーした方が無難です。ただし、SPARC とか m68k なら気にしなくて良い
> 場合もあります。(ただし、完璧に機種依存になるので、その旨コメントで
> 明記した方が良いでしょう。)
教育的観点から言っても、やはり「常にネットワークバイトオーダに」でしょう。

> まるで、馬鹿みたいに思えるかも知れませんが、memcpy で地道に値のコピー
> を行った方が良いです。
バイトオーダと構造体のパディングを考えると、これしかありませんね。

参考
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.15

データ型をやりとりしたいなら、構造体ひとつに対し専用の読みだしと書き出しの関数を作るのが常套手段です。
(内部的には、構造体のメンバ変数をチマチマとネットワークバイトオーダにしながら、バッファにバイト列として書き出します。send側)。

もうひとつの手は(書かなかったら、68userさんが指摘するでしょうが)、数値でもなんでも文字列にしてしまう手です。
クライアント側のテストをスクリプト言語やtelnetを使って簡単にできるので、お薦めです(ただし、簡単すぎて卒業研究っぽくならないかもしれませんが)。

No. 1513 # CoreFighter 2001/01/06 (土) 02:11:36
68userさん MPSの件有難う御座いました。

ところで今疑問に思っている事があるのですが、
NICにはMACアドレスってのがありますよね。
モデムやTAにもMACアドレスってあるのでしょうか?

#ものすごい些細な質問で・・すんません。

No. 1514 # taka 2001/01/06 (土) 23:41:56
はじめまして
すいませんが質問です。
vi でヒアドキメントの使い方がわかりません
linuxで試しているのですが
ex/vi: Vi's standard input and output must be a terminal
とエラーになってしまいます。
できないのでしょうか?

No. 1515 # rosegarden 2001/01/07 (日) 00:08:35
>>1514 taka
> vi でヒアドキメントの使い方がわかりません

ex mode なら大丈夫なようです。ただし ex コマンド使わないと
いけませんが。そのまま vi mode で使う方法は分かりません。

#!/bin/sh

( vi -e | sed -e 's/^#/foo: /' ) << 'END'
a
hoge
hoge
hoge hoge
.
1,$s/^/#/
1,$p
q!
END

あとシングルクォートかエスケープ使った方が良いです。
最後の行の $ とシェル変数がバッティングしますから。

No. 1516 # taka 2001/01/07 (日) 01:05:59
有難うございます
以下のシェルで更新できました。

#!/bin/sh
vi -e data001 << 'END'
i
hoge
hoge
hoge hoge
.
wq!
END

ps
レスのつけ方がわかりませんでしたすいません

No. 1517 # 68user 2001/01/07 (日) 02:21:32
>>1510 E田
構造体の受け渡しに関しては、僕の出る幕はなさげですが、
一応まとめておきます。まず、E田さんはポインタの使い方を
学んで下さい。rosegarden さんのソースは
      tes_s.test1 = ((unsigned long *)ptr)[0];
      tes_s.test2 = ((unsigned short *)ptr)[1];
となっていますが、rosegarden さん自身が説明されている通り
これではまずいので
      tes_s.test1 = *(unsigned long *)(ptr);
      tes_s.test2 = *(unsigned short *)(ptr+4);
の方がいいでしょう。わからなければ再度質問してください。

で、それを理解してからやっとバイトオーダの話になります。これは
今回の件では関係ないかもしれない (エンディアンによってたまたま
問題が顕在化していないかもしれない) ので、参考程度にどうぞ。

以下のソースでは配列 data から変数 test1/2/3 に値を代入しようと
しています。

#include <stdio.h>
#include <string.h>

void
my_memcpy(char *dst, char *src, size_t len){
    src += len-1;
    while (len--) *dst++ = *src--;
}

main(){
    unsigned long test1;
    unsigned short test2;
    unsigned short test3;
    char data[] = {0x12,0x34,0x56,0x78,0x0,0x1,0x0,0x2};
    char *ptr = data;

    test1 = *(unsigned long *)(ptr);
    test2 = *(unsigned short *)(ptr+4);
    test3 = *(unsigned short *)(ptr+6);
    printf("普通に代入 0x%x 0x%x 0x%x\n", test1, test2, test3);

    memcpy(&test1, ptr+0, sizeof(test1));
    memcpy(&test2, ptr+4, sizeof(test2));
    memcpy(&test3, ptr+6, sizeof(test3));
    printf("memcpy 0x%x 0x%x 0x%x\n", test1, test2, test3);

    test1 = htonl(*(unsigned long *)(ptr));
    test2 = htons(*(unsigned short *)(ptr+4));
    test3 = htons(*(unsigned short *)(ptr+6));
    printf("hton して代入 0x%x 0x%x 0x%x\n", test1, test2, test3);

    my_memcpy(&test1, ptr+0, sizeof(test1));
    my_memcpy(&test2, ptr+4, sizeof(test2));
    my_memcpy(&test3, ptr+6, sizeof(test3));
    printf("逆順にmemcpy 0x%x 0x%x 0x%x\n", test1, test2, test3);
}

このサンプルでは
    char data[] = {0x12,0x34,0x56,0x78,0x0,0x1,0x0,0x2};
となっていますが、これを適当に切り取って変数に代入すると
順序が狂ってしまいます。実行結果は以下の通り。
    普通に代入 0x78563412 0x100 0x200 (間違い)
    memcpy 0x78563412 0x100 0x200 (間違い)
    hton して代入 0x12345678 0x1 0x2 (正しい)
    逆順にmemcpy 0x12345678 0x1 0x2 (正しい)
前の2つは順序が逆になっています。これはリトルエンディアンマシン
(x86 など) で発生します。ビッグエンディアン (68000, Sparc など)
では起こりません。

後の2つは htons/htonl や自作の my_memcpy でバイト順を置換して
代入しています (もちろん hton を使う方がよい)。

これはソケット経由でデータを送ると、バイト順が狂うという
意味ではありません。エンディアンが異なるマシン間でも、
データは送った順序で届きます。ですから、同じエンディアン
同士でデータを送りあえば問題は顕在化しません。

ただし、
    「異なるエンディアン間で変数の値を直接送信したとき」
は、
    「一方の CPU 内部ではバイト順の交換が行われるのに、
        他方では行われない」
ので、バイト順が狂ってしまいます。ですから、
    「事前にネットワークバイトオーダに変換してから送信」
し、
    「受信側はネットワークバイトオーダと認識して変数に代入する」
のが望ましいということです。

実際のソースで書くと、以下のような感じになります。

    送受信側でバイトオーダが一致していれば OK。異なるなら NG。
        (送信側)
        long send_num=0x12345678L;
        write(socket, &send_num, sizeof(send_num));
        (受信側)
        long recv_num;
        read(socket, &recv_num, sizeof(recv_num));

    バイト列をソケット経由で変数に代入する。受け手側が
    リトルエンディアンなら OK。そうでなければ NG。
        (送信側)
        char buf[]={0x12,0x34,0x56,0x78}; /* 0x12345687 を送りたいとする */
        write(socket, buf, sizeof(buf));
        (受信側)
        long recv_num;
        read(socket, &recv_num, sizeof(recv_num));

    ネットワークバイトオーダで送信。ネットワークバイトオーダを
    ホストバイトオーダにして代入。これが一番よい。
        (送信側)
        long send_num = htonl(0x12345678L);
        write(socket, &send_num, sizeof(send_num));
        (受信側)
        long recv_num;
        char buf[256];
        read(socket, buf, sizeof(recv_num));
        recv_num = ntohl(*(long *)(buf));

なお、ネットワークバイトオーダ=ビッグエンディアンのオーダです。
別に両者で合意が取れていればいいので、リトルエンディアンで
統一したければそれはそれで構いません。

ちなみに X プロトコルでは高速化のため、事前にクライアント・サーバ
間でバイトオーダが異なるかどうかチェックして、
    - 同じバイトオーダならそのままデータを送る
    - 異なるバイトオーダならネットワークバイトオーダに変換してから送る
となっているとか。

ところで
    my_memcpy(void *dst, void *src, size_t len){
とすると gcc に invalid use of void expression と怒られるんですが、
引数を void * で受けるのってできないんでしたっけ?

>>1512 gixs
> Linuxのselect(2)は、戻った時、第5引数の値が残り時間を示して戻ってくる
> (タイムアウトしたら値はゼロになる) ので、waitvalの値の設定はwhile
> ループ内でやる必要があります(manにも書いてあります)。
ご指摘どうもです。その通りですね。ちなみに FreeBSD では
select(2) の BUGS の項で、本来上記のような動作をするべきだが、
現状ではそうなっていない (waitval の値は書き換えられない) と
あります。

>>1513 CoreFighter
> NICにはMACアドレスってのがありますよね。
> モデムやTAにもMACアドレスってあるのでしょうか?
ないです。なぜかっちゅうと NIC は Ethernet の端点だからです。
# なぜ Ethernet だと MAC アドレスが必要で、モデム/TA に
# MAC アドレスが必要ないか…は、うまく説明できないなぁ。
# 誰か教えて下さい。

No. 1518 # taka 2001/01/07 (日) 14:58:23
すいませんがまた質問です。
今度はftp でヒアドキメントの使い方がわかりません
ftp ftp.xxx.xxx.ne.jp << EOF
userid
password
by
EOF
これで実行すると
Password:Name(ftp.xxx.xxx.ne.jp:root):
と聞かれてしまいます。
シェルだけで実行する方法はありませんか?

No. 1519 # 68user 2001/01/07 (日) 17:43:41
>>1518 taka
> 今度はftp でヒアドキメントの使い方がわかりません
http://X68000.startshop.co.jp/~68user/unix/pickup?ftp
の -n オプションの説明を見て下さい (Linux で使えるかどうかは
わかりませんが)。

No. 1520 # rosegarden 2001/01/07 (日) 22:00:02
>>1487 68user
先日の FreeBSD の crypt(3) のデフォルトについてですが、
暮れから新年にかけてライブラリ関数のレベルで切り替えの
メカニズムが commit されたようです。いまとのところ
5-current でしか使えず、管理権限がないと切り替えられないのですが。
/etc/auth.conf に crypt_default=md5 という設定を入れると perl の
crypt もデフォルトが md5 になるようです。

# 今日 CVSup でソースとって来た人は 20 時以降のソースとって来た方が
# いいです。昼のソースだと pccard 周りのコンパイルが出来ません。
# 今はなおっていますが。

No. 1521 # 68user 2001/01/08 (月) 03:02:15
せっかくなので、
>>1509 68user
のソースを書き直して
    「C 言語で echo サーバを作ってみよう (2)」
    http://X68000.startshop.co.jp/~68user/net/c-echo-2.html
を作ってみました。C言語+select によるタイムアウト機能付き echo サーバです。
# 一応バグは潰したつもり。

あと、これまでご指摘を頂いた
>>1389 Yuuki
の accept のバグ、
>>1215 UNIX見習い
>>1216 68user
の LocalAddr のバグを修正しました。お二人に感謝。

No. 1522 # 68user 2001/01/08 (月) 14:58:03
>>1520 rosegarden
おろ、/etc/login.conf には passwd_format=md5 で、/etc/auth.conf には
crypt_default = md5 des で、libutil で、libcrypt ですか。全然なにが
なんだかわかってませんが、手元にソースがないので調べにくい。MFC を待つか…。

# 軟弱なので、うちは今朝の 4-STABLE です。

No. 1523 # rosegarden 2001/01/08 (月) 20:08:16
>>1522 68user
言葉が足りないようですみません。
4-stable では /etc/login.conf に passwd_format=md5 と明示的に
指定することによって passwd コマンドなどで
使用するハッシュ関数は変更できますが、perl などで使用している
crypt(3) などのハッシュ関数はそのまま des だったりします。
解禁以降、大抵の人はそのまま des 入れているでしょうから。
一方、5-current だと /etc/login.conf でのハッシュ関数の
指定は passwd コマンドでは有効になりますが、それとは別に crypt(3)
のハッシュ関数を /etc/auth.conf で指定できます。
これはさっき CVSup して確かめましたが、4-stable には反映されていません。
http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/lib/libcrypt/crypt.c
ソースはここで確かめられます。
CGI で差分も見れます。

> # 軟弱なので、うちは今朝の 4-STABLE です。
いや、あまり関係ないかと思います。去年の暮れに 4-stable が page fault 頻発して
放棄せざるを得ない状態まで追い込まれたことあります。結局
kernel panic 起こしながら、数個ずつ kernel のファイルをコンパイルして、
安定した kernel をインストールし、それで回復させましたが。
同じ時期の 5-current はすごく安定していました。
ハード構成いかんではそういうことも起こり得ます。

No. 1524 # みかん 2001/01/08 (月) 22:48:59
初めまして。
FreeBSD 3.5.1と、それに付属のperlを使っています。
そこでソケットに関するプログラムを組みましたが、ちょっと問題が出てきました。
下記のソースを見てください。
HTTPサーバに接続して、メッセージを受け取り、一定時間何も受信できないと
プログラムを終了しようとしています。
(本当は、相手のサーバからコネクションを切られたら終了するようにしたいんです。)

サーバと接続されいる状態では、selectは期待した値を戻してくれるのですが、
接続が切断されたあとも、selectの戻り値が 0以外で、いつまでたっても、
ループから抜けられません。
なにか解決方法はないでしょうか?

(大抵のサンプルはwhile (<SOCK>) って感じでやってるみたいですが、
    バイナリファイルが対象でもうまくいくのでしょうか?)

## ソケットを開いて、ポート80)に繋ぐ。 ##
send(SOCK,"GET /index.html HTTP1.0\r\n",0);
$rin='';
vec($rin,fileno(SOCK),1)=1;
while (1) {
    $ret = select($rout=$rin,undef,undef,1);
    if ($ret == 0 ) { last; } #タイムアウト
    recv(SOCK,$x,1,0);
    print $x;
}

No. 1525 # 68user 2001/01/08 (月) 22:58:40
>>1524 みかん
ちろっと見た感じでは
    1. \r\n が一個足りません。
    2. 相手側がコネクションを切断したときも select は 1 を返します。
          その際、recv すると1バイトも読めず、0を返しているはずなのに
          無視しているので永遠に終わらないのです。

# http://X68000.startshop.co.jp/~68user/net/echo-4.html

No. 1526 # 68user 2001/01/08 (月) 23:25:51
>>1523 rosegarden
> 言葉が足りないようですみません。
いや、解説を催促するつもりはなかったのですが、恐縮です。
login.conf ということはユーザごとに DES か MD5 を定義
できて、しかも各ユーザは ~/.login_conf で上書き自由、
ということだと思うんですが、それが出来て何がうれしい
んだろう…ってのが疑問なんです。

# NIS 使用時に幸せ?

> 去年の暮れに 4-stable が page fault 頻発して
> 放棄せざるを得ない状態まで追い込まれたことあります。
恐いですねぇ。僕は FreeBSD-stable も流し読みだし、make world で
こけたとき直すスキルもないので、ビクビクしながらやってます。
4-STABLE じゃなくて 4.2-RELEASE にしとけばよかったな。

>>1524 みかん
> 大抵のサンプルはwhile (<SOCK>) って感じでやってるみたいですが、
> バイナリファイルが対象でもうまくいくのでしょうか?
<> は C でいうところの fgets 相当 (+バッファサイズが無限長) なので
うまくいきます。

うまくいきますが、改行コードが1つもないデータを読もうとすると
一度に多くのバッファ (=メモリ) を消費するので、
    sysread(SOCK, $buf, 8192);
    read(SOCK, $buf, 8192);
    while ( read(SOCK, $buf, 8192) ){ print $buf }
などの方がよいです。

ついでに言っておくと、状況にもよりますが、select に
<> や read を使うのは不適切です。select で読み込み
可能だからといって、「改行コードを含むデータ」や
「指定したサイズのデータ」が読み込めるとは限らない
ので (データの前半部分だけが先に到着しているかも
しれない) からです。せっかく select でブロッキングを
回避しているのに、<> や read の部分でブロッキング
してしまうかもしれない。

# ここでいう read は read(2) でなく perl の read (fread(3)) です。

No. 1527 # gixs 2001/01/08 (月) 23:45:36
>>1517 68user
> ところで
> my_memcpy(void *dst, void *src, size_t len){
> とすると gcc に invalid use of void expression と怒られるんですが、
> 引数を void * で受けるのってできないんでしたっけ?

おや?
68userさんにしては珍しい。
# まあ、プログラミング言語って(自然言語も同じようなものですが)、
# ちょっと離れるだけで勘がにぶって、ポカをやらかしてしまいますが。

そのエラーは、引数で受けた部分ではなく、
dst++などの演算のところのエラーですね。

逆に、char*で受けた場合、gcc -Wallのwarningを黙らすために、
(char*)&test1のようなキャストが必要です。
# gccはいつも-Wall。これでポカミスを結構見付けられます。

No. 1528 # rosegarden 2001/01/09 (火) 02:27:54
>>1526 68user
> それが出来て何がうれしい
うーん、それはそうですね。ただ、人によってこだわりは
あるでしょうから。本当の理由は私も良く分かりませんが、
des インストールしても md5 で crypt できるのはやはり
嬉しいです。

No. 1529 # 68user 2001/01/09 (火) 06:52:37
>>1527 gixs
> そのエラーは、引数で受けた部分ではなく、
> dst++などの演算のところのエラーですね
なるほどなるほど。
    void
    my_memcpy(void *dst, char *src, size_t len){
        (char *)src += len-1;
        while (len--){
            *((char *)dst)++ = *((char *)src)--;
        }
    }
てな感じでしょうか。

> おや? 68userさんにしては珍しい。
僕は元々ヘボです。-Wall は付けてますが、いつも warning が出る
ものの、キャストの仕方がわからず、大抵「まぁ動いているからいいや」で
済ましてしまうレベル (^^;

>>1528 rosegarden
> des インストールしても md5 で crypt できるのはやはり
> 嬉しいです。
ちと考えてみましたが、例えば apache+suExec で CGI を動かす
とき、「俺は前の環境で作成したパスワードがあるので DES」
とか「私はセキュリティ重視で MD5」などと、ユーザごとに
DES/MD5 を選べたりする、ってな場合があるかもしれませんね。


全然関係ありませんが、掲示板の使い方
    http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse
を作りました。上の [使い方] から飛べます。

No. 1530 # みかん 2001/01/09 (火) 17:21:00
こんにちは、UNIX1年生のみかんと申します。

文字列置換のsedコマンドを使って変数の中の文字列を置換して
別の変数に入れたいと考えております。このようなことは可能でしょうか?

sed -e "s/aaa/bbb/g" ${ABC}

ここで変数${ABC} の中に入っている値(例えばaaa)を置換して
変数${CBA}に挿入したいと考えております。

大変に恐縮ですが、ご存知の方がいらっしゃいましたらご教授いただけませんでしょうか。よろしくお願いします。

No. 1531 # hsj 2001/01/09 (火) 19:12:07
>>1505 inpaku
あー、もう解決してらっしゃるかもしれませんが、
だいぶ前にこう言うものをつくりました。
http://www.geocities.co.jp/MotorCity/5319/deception_doc.txt
http://www.geocities.co.jp/MotorCity/5319/deception.txt
暇つぶしにつくった趣味のソースなんで、ぼく自身が忘れないための
やる気のないコメントしか入ってません(苦笑

自ホストのNICからMACアドレスを引っぱってきてるのは、
gethwaddr()関数のあたりです。

あて先ホストのMACはlookup_mac()関数で持ってきてます。
ARPリクエストを流してから、自分のNICにキャッシュされたか
確認することで取得しています。

今見ると、ところどころマヌケできったないソースですが
参考になれば。

No. 1532 # E田 2001/01/10 (水) 10:09:38
68userさん、rosegardenさん、gixsさん、
回答、ありがとうございます。
今から、読みながら、また勉強します。
本当に、ありがとうございました。
やってみて、また、わからなかったら質問すると思いますが、
また、よろしくお願いします。

No. 1533 # とも 2001/01/10 (水) 15:40:30
はじめまして.
IPアドレスとポート番号で,サーバーとそこで動いているサーバープログラムが特定できる所までは理解できました.
では,あるマシンで2つWWWブラウザーを立ち上げて,その両方とも同じHTTPサーバーにアクセスした場合,サーバはどちらのブラウザーにHTMLを送り返すか分からないと思うのですが,それはどうやって識別しているのでしょうか.

No. 1534 # 68user 2001/01/10 (水) 16:07:07
>>1530 みかん
> こんにちは、UNIX1年生のみかんと申します。

>>1524 みかん
の方とは別の方ですか?

sh・bash なら
    CBA=`echo $ABC | sed 's/aaa/bbb/g'`
csh・tcsh なら
    set CBA=`echo $ABC | sed 's/aaa/bbb/g'`
    set CBA=$ABC:s/aaa/bbb/g (これって SunOS の csh でも使えるのか〜)
てな感じでしょうか。他にも方法があると思いますが、
僕はこれだけしか知りません。

>>1533 とも
> では,あるマシンで2つWWWブラウザーを立ち上げて,その両方とも
> 同じHTTPサーバーにアクセスした場合
2つのブラウザは、それぞれソケットを生成しますが、それぞれ
同じサーバに connect したとき、自動的に OS が選んだポート
番号が割り振られますので、それで識別できます。

ブラウザが1つであっても、HTML とその中に貼られている画像を
平行して読み出すときなどはソケットを複数使いますが、これも
別のポート番号が割り当てられます。

クライアントは、getsockname すれば自分に割り当てられた
ポート番号がわかりますし、サーバからは getpeername
すればクライアント側のポート番号がわかります。

ちなみに IP データグラムのヘッダには始点 IP アドレス、
始点ポート番号、終点 IP アドレス、終点ポート番号が
記録されています。

No. 1535 # みかん(一年生) 2001/01/10 (水) 17:22:50
>No. 1534 68user

68userさん、ご教授ありがとうございます!

>>>1524 みかん
>の方とは別の方ですか?

いいえ、みかんという方が他にもいらっしゃったんですね。
これからはみかん(一年生)と名乗ることにします。

68userさんのご教授いただいた内容にて、問題が解決いたしました。
非常に感謝しております。ありがとうございました。

今後ともよろしくお願いいたします。 ・・・質問ばかりしていてはだめだとは思っているのですが(>_<)

No. 1536 # ゆきえ 2001/01/10 (水) 21:25:29
初めて書き込みします。
質問なのですが、ローカルマシンからリモートマシンへコピー(移送)した場合、コピーしたファイルやディレクトリのユーザーID/グループIDがその時の実行ユーザーID/グループIDに変わってしまいます。
これをそのままの設定のままコピーする事はできないでしょうか?
ちなみにrcpとftp(ディレクトリのコピー(移送)自体が既に無理)では無理でした。
出来ればUNIXコマンドかPerlで可能な方法があれば教えて下さい。
これらでは無理でも他の方法でなら可能だと言うご意見でも構いませんので、よろしくお願いします。
使用環境:solaris8
使用言語:Perl5.0、csh

No. 1537 # 68user 2001/01/10 (水) 22:39:18
>>1534 68user
> sh・bash なら
>  CBA=`echo $ABC | sed 's/aaa/bbb/g'`
sh・bash で他の方法があったら教えてください。

>>1536 ゆきえ
> ユーザーID/グループIDがその時の実行ユーザーID/グループIDに
> 変わってしまいます。
というのが既に誤解ではないかと思います。
    % rcp ~/a.txt userA@host:~/b.txt … host:~userA/b.txt のオーナーは userA
    % rcp ~/a.txt userB@host:~/b.txt … host:~userB/b.txt のオーナーは userB
となります。

ですから、ファイルのオーナー/グループが誰になるかは
    「その時の実行ユーザID/グループID」
で決まるのでなく、
    「rcp するとき どのユーザで認証を行うか」
によります。ftp も同じで、ログイン時にどのユーザ名で
認証を行うかで決まります。

No. 1538 # ゆきえ 2001/01/11 (木) 09:31:50
お答えありがとうございます。

>「rcp するとき どのユーザで認証を行うか」
ですと、認証したユーザーに結局は変更されてしまいますよね?
ディレクトリの配下には色々なユーザーIDやグループIDが存在していますのでそれを変更したくはないのです。
調べていますとfilename.tar.zをrcpで移送して、rshでuncompress、tar -xvfpをすろ事でこの問題が回避されそうなのですが、tar -xvfpがうまくいきません。
マシンAのルートディレクトリにある./usr.tarをマシンBからrshで
rsh A tar xvfp ./usr.tar
rsh A tar xvfp ./usr.tar ./.
rsh A tar xvfp ./usr.tar -C ./.
いずれの場合も展開されませんでした。
どうすればtarファイルを展開できるのでしょうか?

No. 1539 # rosegarden 2001/01/11 (木) 10:10:47
>>1538 ゆきえ
> tar -xvfpがうまくいきません
f の直後に tar ファイル名を指定しないといけません。
だから、いつも f は最後と覚えてください。

tar -xvpf hogehoge.tar

No. 1540 # 68user 2001/01/11 (木) 10:14:16
>>1538 ゆきえ
> ディレクトリの配下には色々なユーザーIDやグループIDが
> 存在していますのでそれを変更したくはないのです。
ああ、なるほど。理解しました。

1. ファイルのオーナーを調べ、その権限で rcp する
    foreach file (*)
        set owner=`ls -l $file | awk '{print $3}'`
        rcp $file ${owner}@host:~
    end

2. root で tar xvfp する。
    ただし、展開時のファイルのオーナーは、ユーザ名でなく uid に
    従うので、ローカルとリモートの uid の割り振り (/etc/passwd) が
    同じである必要がある。

てなところですか。

> マシンAのルートディレクトリにある./usr.tarをマシンBからrshで
> rsh A tar xvfp ./usr.tar
rsh の前に マシンA に rcp で usr.tar をコピーしましたか?

>>1539 rosegarden
> f の直後に tar ファイル名を指定しないといけません。
今回は問題ないんじゃないですかね。x,v,p とも引数を取らないので。

No. 1541 # 68user 2001/01/11 (木) 10:26:34
>>1540 68user
>> マシンAのルートディレクトリにある./usr.tarをマシンBからrshで
>> rsh A tar xvfp ./usr.tar
> rsh の前に マシンA に rcp で usr.tar をコピーしましたか?
ああ失礼、マシンAにファイルはあるのね。で、「ルート
ディレクトリ」は「ホームディレクトリ」の間違いですか?
    % rsh A tar xvfp ./usr.tar
だと、~/usr.tar を読みにいってしまいますので。
# root 権限でやってるならルートディレクトリでいいのかも。

No. 1542 # [E-mail] 2001/01/11 (木) 11:07:40
初めて書き込みします。
質問なのですが、DBの接続はDBIで行っています。使用言語はPERLです。
DBへの接続は通常DBIの場合、connectにより行っていますが、
現時点でconnectがされているか、されていないかをコーディング上で
確認する方法はありますでしょうか?
ご存知の方がいらっしゃいましたらご回答のほうをお願いします。

No. 1543 # 68user 2001/01/11 (木) 11:11:39
>>1542
> 現時点でconnectがされているか、されていないかを
> コーディング上で確認する方法はありますでしょうか?
ping ちうのがありますね。$rc = $dbh->ping;

No. 1544 # 68user 2001/01/11 (木) 11:14:56
>>1538 ゆきえ
断りなしにマルチポストする人は、うちの掲示板に
書き込まないで下さい。
    http://www.parkcity.ne.jp/~chaichan/qanda/qa539.htm?01-01-11-10-57
今後は向こうでどうぞ。

No. 1545 # rosegarden 2001/01/11 (木) 12:15:39
>>1540 68user
> > f の直後に tar ファイル名を指定しないといけません。
> 今回は問題ないんじゃないですかね。x,v,p とも引数を取らないので。
はずかしながら今まで、知りませんでした。
御指摘ありがとうございます。

No. 1546 # rosegarden 2001/01/11 (木) 12:28:26
> > > f の直後に tar ファイル名を指定しないといけません。
> > 今回は問題ないんじゃないですかね。x,v,p とも引数を取らないので。
> はずかしながら今まで、知りませんでした。
たびたびすみません。知らなかったのは事実なのですが、GNU tar だと
ハイフン付けて tar するとだめみたいです。
GNU tar 1.13 の場合
% tar -xvfp hoge.tar
tar: Cannot open p: ファイルもディレクトリもありません。
tar: Error is not recoverable: exiting now
一方、Solaris の /bin/tar は 68user さんのおっしゃるとおり
関係なくファイルを取り出せます。これも知りませんでした。

No. 1547 # 2001/01/11 (木) 13:40:02
>>1543 68user
>> 現時点でconnectがされているか、されていないかを
>> コーディング上で確認する方法はありますでしょうか?
> ping ちうのがありますね。$rc = $dbh->ping;
ご回答ありがとうございます。
実際に試してみたんですが、disconnectされている状態で
$rc = $dbh->ping;を実行すると以下のようなエラーが出力されました。

DBD::Oracle::db ping failed: ERROR Database disconnected at ****.pl line ****.
For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.
  
続けて処理をすることはできないのでしょうか?
それとも根本的に何かが違うのでしょうか?
よろしくお願いします。

No. 1548 # 2001/01/11 (木) 13:48:09
>>1543 68user
>> 現時点でconnectがされているか、されていないかを
>> コーディング上で確認する方法はありますでしょうか?
> ping ちうのがありますね。$rc = $dbh->ping;
ご回答ありがとうございます。
実際に試してみたんですが、disconnectされている状態で
$rc = $dbh->ping;を実行すると以下のようなエラーが出力されました。

DBD::Oracle::db ping failed: ERROR Database disconnected at ****.pl line ****.
For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.
  
続けて処理をすることはできないのでしょうか?
それとも根本的に何かが違うのでしょうか?
よろしくお願いします。

No. 1549 # 2001/01/11 (木) 14:03:22
同じ内容を2度送信してしまいました。
どうもすみません。

No. 1550 # 68user 2001/01/11 (木) 14:48:12
>>1546 rosegarden
> % tar -xvfp hoge.tar
> tar: Cannot open p: ファイルもディレクトリもありません。
なるほど。tar -x -v -f p hoge.tar と同じ扱いになるわけですね。
いつも - を付けないので知りませんでした。

>>1547
うーん、SunOS5.6 + perl-5.004_04 + DBD-Oracle-1.06 + Oracle8.0.5.0.0(?) では
    use DBI;
    $o_DB = DBI->connect("dbi:Oracle:", "username", "passwd")
        or die "connect error";
    $o_DB->{RaiseError} = 0;
    $o_DB->disconnect;

    if ( $o_DB->ping ){
        print "connect!\n";
    } else {
        print "not connect!\n";
    }
で、not connect! と表示されました。標準エラー出力には
    DBD::Oracle::db ping failed: ERROR Database disconnected at a line 7.
と表示されますが、その後も処理は続けることができました。

> 同じ内容を2度送信してしまいました。
> どうもすみません。
いえいえ。

おそらくどこかのロボットが がんがんアクセスしているので、
OS の最大数以上のディスクリプタを開こうとして OS や apache や
perl がこけまくってるようです (だからサーバエラーが頻発している)。

普通は二度書きチェックを行っていますが、ちょうど二度書き
チェック用ファイルのオープンに失敗したくさいですね。

No. 1551 # 2001/01/11 (木) 16:35:02
>>1547 68user
回答ありがとうございます。
私もif文で確かめてみましたが、not connect! と表示されず、
処理が途中で止まってしまいました。
やはり、記述の通り環境の問題があると思われます。
ただ、確認の方法が分かったので助かりました。
ありがとうございました。

No. 1552 # 68user 2001/01/11 (木) 19:44:31
>>1551
> 私もif文で確かめてみましたが、not connect! と表示されず、
> 処理が途中で止まってしまいました。
なるほど。うちの環境では、他のエラーは全てトラップできるのに、
ブレースホルダ `?' の数より多く bind_columns すると、エラーと
なって perl が終了してしまうという問題があります。

perl や DBI/DBD のバージョンによっては、ping も同様に
トラップできないエラーを発生することがあるのかも
しれませんね。

# perl+DBI 暦は3ヶ月程度なので、全体的によくわかってません。
## が、Pro*C や PL/SQL より100倍使いやすいということは
## よく理解できました。

No. 1553 # CoreFighter 2001/01/12 (金) 20:37:33
apacheのlogを見ていたのですが、
ほとんどのlogがGETやPOSTの中で
192.168.1.1 - - [11/Jan/2001:04:27:16 +0900] "HEAD / HTTP/1.0" 403 0
っていうlogがありました。
このHEADってなんでしょうか?

No. 1554 # ぽよぞー 2001/01/13 (土) 00:25:18
はじめまて。

http://x68000.startshop.co.jp/

これ、かっこいいんですけど・・・・
.htaccessでできるんですか?
よかったらやりかた教えてください・・・

No. 1556 # has 2001/01/13 (土) 00:56:07
No. 1555は参照元のページの著作権のルールにのっとって
いなかったようなので、もう一度書き込みます。

# 1555は消しておいて下さい>68user

>>1553 CoreFighter
HEADはその名の通り、

HTTP/1.1 200 OK
Date: Fri, 12 Jan 2001 15:34:47 GMT
Server: Apache/1.3.12 (Unix) mod_ssl/2.6.5 OpenSSL/0.9.5a
Last-Modified: Wed, 12 Apr 2000 09:18:00 GMT
ETag: "a7f83-3e0-38f43f48"
Accept-Ranges: bytes
Content-Length: 992
Connection: close
Content-Type: text/html

など、HTTPのヘッダ情報だけを返すMETHODのようです。

参照元:丸山不二夫著「WWWサーバー管理」(稚内北星ビブリオン内)
http://www.wakhok.ac.jp/~maruyama/W3serv/document/node95.html

# wakhokは講義テキストを公開しているそうで、参考になります

No. 1557 # 68user 2001/01/13 (土) 02:30:10
>>1554 ぽよぞー
> http://x68000.startshop.co.jp/
> これ、かっこいいんですけど・・・・
> .htaccessでできるんですか?
無償でこのサーバを提供していただいている Netboy さんが
作成されたものをそのまま使っています。apache のデフォルト設定では
    - HEADER というファイルに書いたものは、ディレクトリ一覧の先頭に表示される
    - README というファイルに書いたものは、ディレクトリ一覧の最後に表示される
で、さらに
    - HEADER, README だとプレインテキスト扱いで、(< > & が置換される)
    - HEADER.html、README.html だと HTML 扱い (< > & はそのまま出力)
という扱いがされます。というわけで、
    http://X68000.startshop.co.jp/~68user/tmp/HEADER.html
    http://X68000.startshop.co.jp/~68user/tmp/README.html
てな感じのものを置いとけばいいです。細かなカスタマイズは IndexIgnore、
IndexOptions、IndexOrderDefault で。詳しくはこちらをどうぞ。
    http://httpd.apache.org/docs/mod/mod_autoindex.html

>>1556 has
> # 1555は消しておいて下さい>68user
へい、消しました。

>>1553 CoreFighter
> このHEADってなんでしょうか?
質問する前に、一通り眺めてくれるとうれしいです。
    http://X68000.startshop.co.jp/~68user/net/http-3.html#5

No. 1558 # 68user 2001/01/13 (土) 04:51:37
>>1430 68user
> おお、化けてる。
    - s|^( +)|'&nbsp;&nbsp;' x length($1)|e;
    + s|^(( )+)|'&nbsp;&nbsp;' x length($1)|e;
というバグが原因でした。

No. 1559 # 403 2001/01/13 (土) 11:54:07
通りすがってみました。(意味不明)

@HEAD
こういう奴もあったりする。

telnet www.yahoo.com 80
Trying 204.71.200.68...
Connected to www.yahoo.akadns.net.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.0 200 OK
Content-Length: 15629
Content-Type: text/html

<html><head><title>Yahoo!</title>
以下略

No. 1560 # debra [E-mail] 2001/01/13 (土) 12:13:56
はじめまして。ちょっとわからなくてききたいのですが・・・。
crontabに登録しようとしているのですがうまくいきません。
10 * * * * /home/〜(実行形式ファイルのフルパス)
と登録したところ、
>UX:crontab:警告:コマンドは /usr/bin/sh で実行されます.
というメッセージが出てきてしまいます。
どうしたらよいのでしょうか?

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 まで処理が
進み、正常にタイムアウト処理が行えます。

No. 1621 # 68user 2001/01/20 (土) 05:01:36
>>1613 ゆっきー
> もし、入力した数値を計算し、結果を出力するような
> サンプルを置いてあるページについて何か思い当たる
> 点があれば教えていただけないでしょうか。
たとえばどのような計算をしたいのですか?

テキストボックス1とテキストボックス2に数字を入力させ、
ボタンを押すと、2値の和を表示する CGI プログラムは
書けますか?

>>1599 キチキチ
そんな腐れサーバとは早く縁を切りましょう :-)

> TELNETが禁止のサーバで、CRONTABみたいに定期的に
> パールスクリプト実行できるテクニックってありますか?
crontab 自体の使用が禁止されておらず、なおかつサーバ管理者を
敵にまわしてよいなら、CGI プログラムから crontab を設定する
とか、~/.forward に crontab を設定するように仕込んでおいて
メールを投げるなどの方法はあります。でも、お薦めしません。

あと、外部から定期的に指定の URL にアクセスしてくれる
サービスがありますので、それを使って CGI プログラムを
一定時間ごとにアクセスさせるってのもあります。
確か webtimer って言ったかな。検索して探してみてください。

No. 1622 # 68user 2001/01/20 (土) 05:30:50
>>1610 rosegarden
補足などしてみたり。間違ってたらご指摘お願いします。

    % cat
と実行して、C-p,C-m,C-v,C-m とタイプしてみて下さい。C-p は ^P と
出力されるでしょう。rosegarden さんが書かれた通り、C-m は改行に
なります。C-v C-m は ^M と表示されます。

この表示は、キー入力を受け取った端末ドライバが行っています。その
端末ドライバのキー割り当てを変えるのが stty コマンドなわけです。
改行 (この場合 C-m と等価) を打たない限りは、cat に文字列は
渡りません。1行のデータが確定して初めて、端末ドライバが cat に
データを送ります。

次に tcsh か bash を起動して、そこで C-p,C-m,C-v,C-m をタイプして
下さい。C-m や C-v C-m はさきほどと同じですが (tcsh ^M でなくて
^J となりますが、両方改行コードなのでこれは置いといて) 、C-p の
挙動が違いますね。1つヒストリをさかのぼります。つまり、1行を
入力していなくても、1文字打った瞬間に tcsh や bash にデータが
渡っていることになります。

これは tcsh や bash が端末ドライバを経由せずに、直接キー入力を
取得しているからです。これを canonical モードといいます。端末の中で
動く mule や emacs や vi もcanonical モードになっているわけです。
これらは端末ドライバを経由していないので、stty の設定とは無関係です。
例えば tcsh のコマンドラインで C-v C-m で ^M となるのは、
    % stty erase ^H
しているからでなく、デフォルトで
    % bindkey ^V quoted-insert
という設定になっているからです (bindkey は tcsh の内部コマンド)。

一方、伝統的な sh は canonical モードでは動きません。(Linux だと
sh=bash だから例外)。つまり端末ドライバ経由でキー入力を拾う
わけで、この場合は stty を使って設定します。

> du や df コマンドの -h (human friedly) オプション
> というのはご存知でしょうか?
関係ないですが、FreeBSD 2.2.6-RELEASE では du -s が使えず
くやしい思いをしました。

使いこなせると幸せだと思うオプション。
    ls -lt、uniq -c、tail -f、du -s
# du -s は Solaris にはないかな。

No. 1623 # rosegarden 2001/01/20 (土) 07:09:17
>>1622 68user
> これは tcsh や bash が端末ドライバを経由せずに、直接キー入力を
> 取得しているからです。これを canonical モードといいます。端末の中で
> 動く mule や emacs や vi もcanonical モードになっているわけです。
> これらは端末ドライバを経由していないので、stty の設定とは無関係です。
あ、そうですね。前の
>>1610 rosegarden
を見ると、emacs の設定も stty でするように読めますね。そう思って読むと、
stty 経由で設定するものとソフトウェア自体が設定するものとがごっちゃに
なっていますね。「コマンドライン」というのは、最近の私の環境だと
tcsh での話になるから、stty うんぬんは、まちがいだなあ。

とにかく、補足というかご指摘ありがとうございました。

> ls -lt、uniq -c、tail -f、du -s

このなかでは、uniq -c は知らなかった。これ便利ですね。

No. 1624 # 403 2001/01/20 (土) 08:56:46
>>1622 68user
> これは tcsh や bash が端末ドライバを経由せずに、直接キー入力を
> 取得しているからです。これを canonical モードといいます。端末の中で
> 動く mule や emacs や vi もcanonical モードになっているわけです。
> これらは端末ドライバを経由していないので、stty の設定とは無関係です。
ttyドライバは経由してるけど、canonicalはほぼ素通しなモードなので、直接取ってるように見えてる。
コントロールコードは、sttyでの設定と同一のものを使用するプログラムが多い。
が正確でしょう。
canonicalモードとrawモードの違いを述べよ。

No. 1625 # Netboy [E-mail] 2001/01/20 (土) 14:41:01
>>1621 68user
>確か webtimer って言ったかな。検索して探してみてください。
それ,私のです(泣).

>>1599 キチキチ
WebTimerは

http://jp.usami.com/~robot01/
  
です.我が家の自宅サーバーからつつきます.
とりあえず'98夏から動いてます.
最近メンテしてませんけど,よかったらどうぞ...

No. 1626 # 68user 2001/01/20 (土) 22:11:49
>>1622 68user
う、canonical と 非 canonical が逆でした。canonical は1行単位、
非 canonical が素通しモードでした。

>>1624 403
> canonicalモードとrawモードの違いを述べよ。
ちと調べてみましたが、canonical, non-canonical と raw, cbreak,
cooked の関係がいまいち…。うーむ。

>>1610 rosegarden
> % stty erase ^H
あと、stty を実行するときには端末が割り当てられている必要が
あるので、~/.cshrc に
    stty erase ^H
と書いていると、rcp などを使ったときに (コピーはできますが)
stty がエラーとなります。なので
    if ( ${?TERM} ) then
        stty erase ^H
    endif
と、環境変数 TERM が設定されている (=端末が割り当てられている)
ときだけ stty が実行されるようにしましょう。telnet や rlogin
でログインしたときは stty が実行され、rcp のときは実行されません。

ここまで書いてふと思ったのですが、stty って ~/.login に書いとけば
こういうことを気にする必要はないのか?

>>1625 Netboy
>> 確か webtimer って言ったかな。検索して探してみてください。
> それ,私のです(泣).
失礼しました (^^; お肉さんのとこで見た記憶はあったのですが。

No. 1627 # rosegarden 2001/01/20 (土) 22:54:24
>>1626 68user
> ここまで書いてふと思ったのですが、stty って ~/.login に書いとけば
> こういうことを気にする必要はないのか?
tcsh のマニュアルには書いてありますね。
> Commands like stty(1) and tset(1), which need be run only
> once per login, usually go in one's ~/.login file.
あと vi ことに nvi からシェルコマンドを実行した時に
.cshrc に stty があるとトラブるそうです。
これは、どこかのメーリングリストで見た記憶があるのですが、
失念しました。

No. 1628 # キチキチ 2001/01/20 (土) 23:03:29
>>1621 68user
ご指導、ありがとーございました☆
> んな腐れサーバとは早く縁を切りましょう :-)
たしかに、おっしゃるとーり...
予告なしに、TELNETもSYSTEMに影響することが全面禁止なんて、洒落にもなってないです(^^;
他のサーバを探してみたら、よさそうなのがいろいろ見つかりました。
頑張っていいサーバを探してみることにしまーす。


>>1625 Netboy
>WebTimer
アドレス感謝です☆
今は必要なくなりそうですけど、
WebTimerにお世話なるときがきたら有難く使わせてください。
そのときはよろしくお願いします。

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

No. 1629 # ラルフ 2001/01/21 (日) 05:57:45
はじめまして。どこで聞いたらいいかと探し回った挙句、ここを見つけました。
どうか質問させてください。

私のプロバイダはメールにqmailを使っていて、転送の設定などを行う際に、
.qmail というファイルをホームに置くことになっています。
プロバイダ曰く、「当社はqmailを無加工で設置しています。.qmailの記述内容に関するお問い合わせはご遠慮ください。」
だそうです。

単純な転送の仕方などはわかるのですが、他にどんなことができるのか調べようにも
ネット上に見つかるリソースはqmailの設置や管理の仕方などばかりで、一般ユーザの使い方には
ほとんど触れられていません。
どこかに .qmail というユーザが設置する設定ファイルについて詳しくかかれている
サイト等はないでしょうか?

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

No. 1630 # 68user 2001/01/21 (日) 06:14:23
>>1629 ラルフ
> どこかに .qmail というユーザが設置する設定ファイルについて
> 詳しくかかれているサイト等はないでしょうか?
http://www.jp.qmail.org/ より、付属文書 -> dot-qmail とたどって、
http://www.jp.qmail.org/q103/jman5/dot-qmail.html ですね。

No. 1631 # 伊部 茂平 [E-mail] 2001/01/21 (日) 07:12:31
Western Digital Caviar33100をインターネットオークションにて購入した者ですが、FDISK.EXEにてフォーマットをするとDOS領域作成に非常に時間がかかります。
故障しているのでしょうか。
故障しているのでなければ、何か良いフォーマット方法を教えてください。
ちなみに自分が使用しているパソコンは、NEC製のPC9821V13です。

No. 1632 # 伊部 茂平 [E-mail] 2001/01/21 (日) 07:38:28
Windows3.1用のグラフィックアクセレータOEM設定ファイル(*.INF)を探しています。提供しているサイト等はないでしょうか?
ちなみに自分が使用してパソコンは、NEC製のPC9821V13で内臓アクセレータGD5430(Cirrus)とハイカラーグラフィックアクセレータPCIボード(NECのPC9821Xaに付属していたもの)です。
MS―Windows3.1のフロッピーディスクにはOEM設定ファイルがありませんでした。
宜しかったら、OEM設定ファイルの提供をお願いします。

No. 1633 # 68user 2001/01/21 (日) 07:52:57
>>1631 伊部 茂平
>>1632 伊部 茂平
Windows について質問するなら、
    http://www.so-net.ne.jp/ClubHouse/room/pc_scramble_win/pc_scramble_win.html
あたりが適当でしょう。

No. 1634 # ゆっきー [E-mail] 2001/01/22 (月) 08:06:25
>>1621 68user
>テキストボックス1とテキストボックス2に数字を入力させ、
>ボタンを押すと、2値の和を表示する CGI プログラムは
>書けますか?

それも書けないちょー初心者です。
こんなものが発言するのって間違いですね。

No. 1635 # O.Z 2001/01/22 (月) 16:43:32
はじめまして
以前pop3,smtpのプロトコルについて調べたときに訪れて以来、
いつも楽しく拝見させてもらっています
好奇心的疑問で、特別切羽詰まってるわけではないのですが、
もしよかったら少しお付き合いのほどを…

現在一般的には、NATを使ってるLAN内の特定の端末に、
外部からアクセスすることは不可能と言われてますよね?
友人に尋ねたら、”RASがあるよ”といわれて調べてみたのですが、
”プロバイダに繋ぐ代わりにRASサーバに繋いで、LANの端末の一部になる”
というのが私のイメージでした。
そこでふと思ったのですが、常時接続している端末がRASを使ったら、
プログラム的にはどうなるんだろう、ということです
物理的に出口は二つあるのですが、
単純にIP解決の順番が複雑になるということなのでしょうか?
一つの端末に二つのIPを振るようなことになる気がしますが、
そもそもこんなこと可能なのでしょうか?
何か情報がありましたら、よろしくおねがいします

No. 1636 # 68user 2001/01/23 (火) 02:47:14
>>1635 O.Z
RAS というものは知りませんが、
> 一つの端末に二つのIPを振るようなことになる気がしますが、
可能です。ネットワークカードが2枚ささっていて、それぞれに
別の IP アドレスが振られているようなものです。

例えば、ルータを買う金がないので PC でゲートウェイマシンを
立てる場合がそれです。ネットワークカードを2枚刺して、1つの
NIC には 10.0.1.1 (ネットワークアドレス 10.0.1/24)、もう
1つの NIC には 10.0.2.1 (ネットワークアドレス 10.0.2/24) を
振ります。

仮に、10.0.1.1 の先にインターネットが繋がっていて、10.0.2.1 の
先には 10.0.2 のネットワークしかないとします。その場合は、
    - 10.0.2 (netmask 255.255.255.0) 宛のパケットは 10.0.2.1 へ。
    - それ以外のパケットは 10.0.1.1 へ (デフォルトゲートウェイ)。
と経路を定めます。

というわけで、このマシン上で HTTP クライアントを動かすと、
経路表に従ってどちらの IP アドレスを始点とするかが決まり、
自然と出ていく NIC も決まるわけです。

ここでは NIC 2枚を例に上げましたが、NIC 1枚と PPP 接続でも
同様です。パケットの出口であるインタフェースが2つあることに
違いはありません。
# IP アドレスというのは、マシンに割り振るものではありません。
# インタフェースにごとに割り振るものです。

ちなみに UNIX では、経路表は netstat -r で、インタフェース
一覧は netstat -i で見られます。

No. 1637 # HANA 2001/01/23 (火) 10:08:07
どこ探せばいいのかも解らず、やっとの思いでここに辿り着きました・・ホッ。
「フォアグランド」「バックグランド」について教えて頂きたく思います。
現在、会社のDB更新(Oracle7)をフォア〜で行っているのですがこれをバック〜に変更すると何かメリットが出るのでしょうか?!
「バック〜に変更しよう」案が出ており、上司から「何か違うの?」と聞かれ、言葉につまっております。助けて下さい。。

No. 1638 # 68user 2001/01/23 (火) 10:30:20
>>1637 HANA
> 現在、会社のDB更新(Oracle7)をフォア〜で行っているの
> ですがこれをバック〜に変更すると
フォアグラウンドで更新というのはどういう意味ですか?
例えば sqlplus をコマンドラインから叩いているという
意味ですか?

No. 1639 # O.Z 2001/01/23 (火) 11:00:23
>>1636 68user
なるほど、経路という概念があったんですね
設定運用等に関してはまるで無知ということが改めてわかりました(笑)
インターフェイスごとにIPを振るというのも、いわれてみれば納得です
本の説明なんかじゃ、端末にIPを振るという感じで説明されてるので、
すっかりそういうものだと思ってました
NICを指定してIPを振ったという事実も忘れて…
思い込みとはかくも恐ろしい(笑)

回答ありがとうございました

No. 1640 # HANA 2001/01/23 (火) 11:01:43
No.1637の付け足しです。
すいません、よく解っていなくて。
Cで書かれているバッチJOBがあり、それが動いているのがフォア〜で見えているという感じです。

No. 1641 # sato 2001/01/23 (火) 11:18:35
linuxのネットワークがどうも調子が悪いようなのです。

ファイルを転送(ネットワークに負荷がかかると)すると途中でネットワークがつながらなくなってしまいます。システムがおちているわけではなく、その後シャットダウン+電源を一度ぬく+linux起動で再びネットワークはつながります。しかし、電源を抜かずに再起動してしまうとネットワークはつながりません。マシンの環境は、WinNT4.0とTurbolinuxがインストールされていてLANにつないでいます。
解決方法を知っている方がいましたら宜しくお願いします。

No. 1642 # rosegarden 2001/01/23 (火) 11:42:14
>>1635 O.Z
> 現在一般的には、NATを使ってるLAN内の特定の端末に、
> 外部からアクセスすることは不可能と言われてますよね?
そうなのでしょうか? port forwarding あるいは port redirection
を併用したら、可能なような気がしていますが。私は FreeBSD 使っていて、
ISP の接続の際に FreeBSD の ppp コマンドを使っています。そのコマンドに
はしっかり、外から来たパケットを特定のホストの特定のポートに取り次ぐ
機能がついています。当然、natd(8) にもその機能はついています。

もちろん、NAT の純粋な規格上の話であるかどうかは別です。規格は知らない
のですが、私がいいたいことは、NAT 自体が LAN 内の特定のマシンに外部か
らのアクセスさせることが無理であるにしても、(おそらく大抵のNATを実装し
たソフトには)実用上それを可能にする仕組みがあるんじゃないかということ
なんですが。

あと、
> 一つの端末に二つのIPを振るようなことになる気がしますが、
> そもそもこんなこと可能なのでしょうか?
これは alias 使って、一つのインタフェースに
# ifconfig fpx0 inet alias 192.168.1.1 netmask 255.255.255.255
などとするのではだめなんでしょうか? (上のコマンドライン例は適当です)。

# 最近、ポカが多いから、自信ないですけど :-{

No. 1643 # 68user 2001/01/23 (火) 11:50:56
>>1641 sato
そもそも NIC の型番を書かないと、根本解決には至らない
でしょう (書いてもらっても僕はわかりませんが)。

繋がらなくなったら一度 ifconfig [interface] down して、
ifconfig [interface] up すれば直るのかもしれませんが、
しょせん対処療法ですね。

>>1640 HANA
> Cで書かれているバッチJOBがあり、それが動いているのが
> フォア〜で見えているという感じです。
C で書かれている DB 更新用コマンドがあるのですね?
それをコマンドラインからタイプしている、ということを
指してフォアグラウンドで動かしている、と表現している
のですね?

UNIX 的な意味で「バックグラウンド」と言うと、
    % foo &
と & を付けてコマンドを実行することですが、これを
行いたいのですか? もしそうだとしたら、なぜですか?

No. 1644 # rosegarden 2001/01/23 (火) 12:20:56
>>1642 rosegarden
> そうなのでしょうか? port forwarding あるいは port redirection
> を併用したら、可能なような気がしていますが
ちょっと実験して見たけど、port forwading 程度じゃ無理みたいですね。
ifconfig alias 使った時には、うまく jail へ port forwarding
できたのに。やはり物理的に別マシンだとむりなんでしょうか?

No. 1645 # 68user 2001/01/23 (火) 12:39:51
>>1642 rosegarden
>> 現在一般的には、NATを使ってるLAN内の特定の端末に、
>> 外部からアクセスすることは不可能と言われてますよね?
> そうなのでしょうか? port forwarding あるいは port redirection
> を併用したら、可能なような気がしていますが。
「一般的には」という意味にもよるとは思いますが、可能ですね。
FreeBSD の natd なら、redirect_addr/redirect_port あたりで
設定した記憶があります。別マシンでも問題ないです。

> 一つのインタフェースに
> # ifconfig fpx0 inet alias 192.168.1.1 netmask 255.255.255.255
> などとするのではだめなんでしょうか?
あえて書きませんでしたが、一つのインタフェースに複数の
IP アドレスを振ることもできます。
    ex0: flags=843<UP,BROADCAST,RUNNING,SIMPLEX> mtu 1500
            inet 10.0.1.103 netmask 0xffffff00 broadcast 10.0.1.255
            inet 10.0.1.116 netmask 0xffffff00 broadcast 10.0.1.255
            ether 00:aa:00:b9:ab:8e
こんな感じ。

IPv4 だと上にある方が primary って決まってるんだっけな。
IPv6 はどっちが主か副かは区別がなかったかもしれない。

用途としては、同じ NIC に IP アドレスを2つ振って、ftp
サーバを1つだけ起動しておき、どっちの IP アドレス宛に
接続してきたかで、表示する内容を変えるという、バーチャル
ホストのようなことができます (というか、それしか知らない)。

HTTP だと Host ヘッダがあるので、1つの IP アドレスで
バーチャルホストができるんですけどね。

No. 1646 # HANA 2001/01/23 (火) 12:50:29
何度もすいません。バックグラウンドで動かした方が、フォアグラウンドで
動かすよりメリットがあると言われました。早い,コンソールがフリーズ
しても問題なくバッチが終了する。。。事実でしょうか?
他にも”DB更新バッチ”を動かすのに何か違いがでるのでしょうか?

No. 1647 # 68user 2001/01/23 (火) 13:03:46
>>1646 HANA
はぁ、こっちの出した問いには答えず、質問するのみで
疑問を解決しようとは、こりゃまた人をなめた話ですね。

以下、詳しく説明する気はなくなったので独り言。
興味のある人は突っ込んで下さい。

> 早い
速さは変わりません。

> コンソールがフリーズしても問題なくバッチが終了する
端末からログインして実行すると、接続が切れたとき
HUP シグナルが飛んできてプロセスは終了します。では
バックグラウンドなら OK かというと、たしかシェルに
よるんだったかな。bash なら & を付ければ nohup 相当
のことをしてくれたかもしれない。tcsh なら & を付けても、
接続が切れれば SIGHUP が飛びます。

No. 1648 # HANA 2001/01/23 (火) 15:31:30
そういうつもりは全くなかったのですが、結果的に問いに答えず質問だけ
してしまった様です。すいませんでした。
バックで動く様、自分たちで変更するのではなく、”依頼”する為、それが
「&」をつける事なのか解っていないのが事実です。”その方が良い
らしい”と、根拠のないまま話が進んでいる状態の為何が違うのかと思い
すがる様にメールしてしまいました。本当に申し訳ございませんでした。

No. 1649 # perrolin 2001/01/23 (火) 19:48:31
皆様はじめまして
私は現在 perl で SOCKS クライアントを作成しようとしているものですが、なかなか資料も少なく煮詰まっております(c はまったく分かりません)
RFC や NEC を読んでもうまく SOCKS サーバーに送信できないのです
どなたか SOCKS に詳しい方、ご教授いただけないでしょうか?

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

No. 1650 # has 2001/01/23 (火) 23:10:51
>>1648 HANA
あなたが困っているらしいことは、とてもよくわかるのですが、
ここで書き込みを見ている人にとって、お困りの問題を把握するための
情報源はあなたの発言だけであることを御理解下さい。
問題を解決するためには、目標が何であるのか、現状がどうなっているのか、
ということが把握できなければならないのはどんな世界でも共通ですし、
おわかり頂けることと思いますが、
今の状態では現状把握のための情報が圧倒的に不足していますので、
おそらくほとんどの人は、あなたの質問に答えることができません。

もしまたこの掲示板にしろ別の場所にしろ質問なさるようでしたら、
その辺りに十分気を使うべきであるということを誤認識下さい。

# 余計な発言でしたらごめんなさい

No. 1651 # rosegarden 2001/01/24 (水) 01:31:37
>>1644 rosegarden
> ちょっと実験して見たけど、port forwading 程度じゃ無理みたいですね。
> ifconfig alias 使った時には、うまく jail へ port forwarding
> できたのに。やはり物理的に別マシンだとむりなんでしょうか?
>>1645 68user
> FreeBSD の natd なら、redirect_addr/redirect_port あたりで
> 設定した記憶があります。別マシンでも問題ないです。
原因が分かりました。今日一日、これにはまった :-<
ipfw の設定変えたり、果ては tcpdump でパケットモニタして、
調べたり散々色々なことをしたけど、全部無駄でした。
NAT の設定ページ見たら一発で解決しました。

原因は、NAT 動かしているマシンで、/etc/rc.conf に
gateway_enable="YES"
が入っていなかっただけです。
# ああ、自己嫌悪

これだけでは、お騒がせしただけなので、ちょっと設定書いておきます。
私の場合 FreeBSD の /usr/sbin/ppp の NAT を使っています。ダイヤルアップです。
(1) gateway_enable="YES" を /etc/rc.conf にいれる。
(2) ファイウォール等の設定を見直す。
(3) /etc/ppp/ppp.conf は以下の通り。
default:
                set device /dev/cuaa0
                set speed 115200
                set timeout 300
                set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 15 \"\" ATE1Q0 OK-AT-O \\dATDP\\T TIMEOUT 40 CONNECT"
                disable lqr
                deny lqr
ISP:
                accept chap
                disable pap
                disable mppe
                nat enable yes
                nat log yes
                set openmode active
                set phone "xxx-yyyy" # ISP の AP の電話番号
                set authname username # アカウント
                set authkey password # パスワード
                set timeout 300
                set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
                add default HISADDR
                enable dns
                nat port tcp 192.168.1.2:80 80

最後の nat port tcp 192.168.1.2:80 80 というのが port forwarding
の設定で、ダイヤルアップをしているマシンの 80 番ポートに到着した
パケットは全部 LAN 内部の 192.168.1.2 というマシンの 80 番ポートに
取り次げます。ですから、LAN 内部に外部公開用のサーバをおくことが出来ます。

# 上の ppp.conf はあまり考えて書いていないので、
# 多分突っ込む余地は沢山あるかと思います。

No. 1652 # rosegarden 2001/01/24 (水) 02:02:37
>>1651 rosegarden
ちょっと補足です。
FreeBSD の古いインストール解説書などを見ると、ppp で NAT
使う際には ports/packages の NAT つき ppp をインストールするように
などと書いている場合があるのですが、最近の 4.0-RELEASE 以降の
/usr/sbin/ppp ならデフォルトで NAT をサポートしていると思います。
私が確認したのは 4.1.1-RELEASE 以降なので、4.0-RELEASE と
3-stable でどうなっているのかは、断定は出来ないのですが、
port の NAT ppp が必要なのは以前のリリースだったと記憶しています。
4.2-RELEASE などをインストールしている人は下の方法で NAT life が満喫できます。

あと kernel OPTION の設定云々と書いてある本もありますが、
4.2-RELEASE 以降なら、カーネルの再構築はほとんど不要だと思います。
とりあえず試すだけなら、GENERIC カーネルでも十分だと思います。
現在は KLD が Solaris 並にうまく動作するようになっているので、
メモリをケチる必要がなければ、自動的に必要なモジュールをロードします。
もちろん、再構築した方がカーネルが小さくなるのでそれはそれで
メリットありますけど。

# とはいっても、パソコンもう一台動かすための電気代がもったいないので、
# 私個人としては、まず、自分の家では NAT なんか使いませんが。

No. 1653 # 68user 2001/01/24 (水) 02:31:04
>>1649 perrolin
> どなたか SOCKS に詳しい方、ご教授いただけないでしょうか?
僕は全くわかりませんし、詳しいページも知りませんが、
Net::SOCKS モジュールが参考になるかもしれません。

>>1652 rosegarden
ppp に NAT 機能が付いたのは FreeBSD 3.3-RELEASE からです。
佐藤淳一さんの nat-patch は archie、rlogin、RealAudio、
X プロトコル などの各種プロトコルにも対応していましたが、
現在は開発が終了し、本家の libalias へのマージ段階と
見てよいと思います。
    http://configure.sh/FreeBSD/extend-libalias-j.html
    http://www.jp.FreeBSD.ORG/QandA/HTML/211.html
    http://configure.sh/FreeBSD/NAT/nat.html
    http://configure.sh/FreeBSD/NAT/nat2.html (このページおもしろい)

No. 1654 # O.Z 2001/01/24 (水) 11:29:05
むむ、どうやら私の書き方は、かなり不適切だったようです
”特定”ではなく、”任意”という言葉を使うべきでした

内から外はNATが使えるけど、外から内は何を使うのか
というのがそもそもの疑問だったのです
結局RASも内の一部になるという技術のようですし、
IPv4のうちは、外から内は実質不可能なのかな、というのが感想です

お二人のNATの説明はとても参考になりました
まだしばらくはNATのお世話になりそうですしね

No. 1655 # YAGI [E-mail] 2001/01/24 (水) 17:25:54
>1618 gixs様
レスが遅くなってしまい、すいません。
文章の書き方はすみませんでした。
他の人にも、時系列で書いた方が分かりやすいと指摘を受けました。

一度、リブートをしまして1からはじめてみましたので
手順を書いてみます。
1.NISサーバの設定
    NIS管理しようとしているユーザの作成/etc/passwd
    smitty chypdom
    smitty mkmaster
    コマンドを発行し正常終了しました。
2.NISクライアントの設定
    smitty chypdomでNISサーバと同じドメインを入力しました
    smitty mkclientで開始時期を決め実行しました。
    /etc/passwdをNIS管理用に編集しました

passwdを保存すると、クライアントのログインが不可となってしまうのです。
ypcat passwdも応答がない状態になってしまいます。

私のほうでも、色々と思い当たる物は考えてみたのですが、
NIS以前に
1.会社の引越しがあってIPが変わった
ということもあったのです。

ただ、私のほうで何をどう見てよいかわからないレベルなもので
他の人にも聞いたりしているのですが、特に問題ないのではという回答なのです。

もし、思い当たる点があれば教えていただきたく思います。
IPが変わる際に設定しなければ行けないファイルhostsファイルなど
があれば、教えていただけると、非常にうれしいです。

毎回毎回、分かり図らい文章だと思いますが、よろしくお願い致します

No. 1656 # gixs 2001/01/24 (水) 21:59:48
> 文章の書き方はすみませんでした。

いえいえ、人のことを言えるほどでもありませんので。

NISクライアント側には、
1. そもそもNISの/etc/passwdが見えているか
2. 見えていたら、それをログイン時に参照できているか
の2段階のチェックポイントがあります。

> passwdを保存すると、クライアントのログインが不可となってしまうのです。
> ypcat passwdも応答がない状態になってしまいます。

ypcat passwdの応答が無いということは、まだ第1段階の問題のようです。

> 2.NISクライアントの設定
> smitty chypdomでNISサーバと同じドメインを入力しました
> smitty mkclientで開始時期を決め実行しました。
> /etc/passwdをNIS管理用に編集しました

smitty mkclientの時、NISサーバはホスト名で入力したのでしょうか、
それともIPアドレスですか?
ホスト名で入力するなら、ローカルの/etc/hostsにNISサーバのエントリが必要です。

IPアドレスで入力するなら、結局、

> マップの更新後に、stopsrc -s ypbind
> startsrc -s ypbind -a "ypsetme"
> ypset (ServerのIPアドレス)
> を行なったところ、無事に設定する事が出来ました。

これを、smittyが内部的に実行するだけだと思いますが。
(明示的にNISサーバを指定しなくても、ブロードキャストで見つけられる・・・はず、
ですが、何とも言えません)


ローカルの/etc/hostsにNISサーバのエントリがあるのに、
ホスト名での指定がうまく行かない場合、ホスト名の名前解決がうまくないのでしょう。

> 一度、/etc/netsvc.confを作り
> hosts=local,nisを作成してやって見たのですが

こう言っているので、問題無いとは思いますが。
ただ、古いAIXでは、このファイルは無かったはずです。

ypcat passwdが応答の無い時、
ping [NISサーバのホスト名]
の応答はあるのでしょうか?
無いなら、ローカルの/etc/hostsを先に見ていないと判断できます。

> 毎回毎回、分かり図らい文章だと思いますが、よろしくお願い致します

# どうでもいい突っ込み。
# 「わかりづらい」なら、この誤変換は出ないと思います。

No. 1657 # perrolin 2001/01/25 (木) 01:38:58
>>1653 68user 様
>Net::SOCKS モジュールが参考になるかもしれません。

レスありがとうございます。
Net::SOCKS を使ったソースを参考にがんばってみたいと思います。

No. 1658 # YAGI [E-mail] 2001/01/25 (木) 11:05:46
>gixs様

>smitty mkclientの時、NISサーバはホスト名で入力したのでしょうか、
>それともIPアドレスですか?
この画面なのですが、AIXのバージョンが4.2.1の為に
smitty mkclientで表示される画面が、
「* NIS クライアントを開始する時期 両方」
しか、表示されないのです

>ypcat passwdが応答の無い時、
>ping [NISサーバのホスト名]
>の応答はあるのでしょうか?
試して見たのですが、応答ありませんでした。

># 「わかりづらい」なら、この誤変換は出ないと思います
タイプミスで「わかりずらい」と打っていました。^^;

No. 1659 # kaori [E-mail] 2001/01/25 (木) 16:12:33
  はじめまして。 kaoriと申します。

  Perl言語を勉強中です。 非常に参考になる情報をありがとうございます。
いつも感心しながら参考に勉強させてもらっています。

  どうしてもわからないので教えてください。
Socketの使い方はなんとなく判ったのですが、IPv6のSocketはどういうふうに
すればよいのでしょうか?
Socket6っていうのをインストールしてみましたが、よくわかりません。。

  私の環境は、FreeBSD-RELEASE4.1に、Perl5です。

  こんな感じで作っていて、IPv4ではちゃんと動作しています。

                $port = getservbyname($port_no,'tcp') || $port_no;
                $socket = IO::Socket::INET->new(PeerAddr => 127.0.0.1,
                                                                PeerPort => 80,
                                                                Proto => 'tcp',
                                                                );

  ご助言、よろしくお願いいたします。

No. 1660 # 68user 2001/01/25 (木) 18:52:18
>>1659 kaori
  - IPv6 環境が構築してあるか。ping6 コマンドを使って
      IPv6 で反応が返ってくるか (localhost 宛でもよい)。
  - perl が IPv6 に対応しているかどうか。perl-5.005_03 なら多分
      無理。5.6 か 5.7 で対応したかもしれません。Socket6 というのを
      使えば 5.005_03 でもいけるのかもしれませんが、僕は試したことが
      ありません。

それをクリアすれば、少しの例外を除いて基本的には書き方は同じです
(そうしないとソースレベルでの互換性が全くなくなるので)。例外と
いうのは gethostbyname の代わりに getaddrinfo を使うとか。

とりあえず perldoc Socket6 してみてください。サンプルの
ひとつでも載っているのではないでしょうか。

No. 1661 # 68user 2001/01/25 (木) 21:22:48
>>1660 68user
> 少しの例外を除いて基本的には書き方は同じです (そうしないと
> ソースレベルでの互換性が全くなくなるので)。例外というのは
> gethostbyname の代わりに getaddrinfo を使うとか。
あー激しく不正確だなぁ。gethostbyaddr で IPv6 なプログラムは
書けます。でも、AF_INET を AF_INET6 にしないといけないとか、
struct sockaddr_in を struct sockaddr_in6 にするだとか、
ソースレベルでの書き換えが必要になります。しかもそのように
書き換えると IPv4 では動きません。

そりゃまずいというわけで、IPv4 でも IPv6 でも同じ書き方が
できるような新しいライブラリが追加されました。getaddrinfo
という関数や AF_UNSPEC というアドレスファミリ (AF_INET とか
AF_INET6 とかを指定する必要がない) などなど。

というわけで、IPv6 only のプログラムは簡単に書けますが、
書いちゃいけません。IPv4/v6 両方で動くようなプログラムを
作るべきです。

あと、FreeBSD 4.1-RELEASE のデフォルト状態なら IPv6 対応の
はずですね。/etc/inetd.conf の
    #echo stream tcp6 nowait root internal
あたりを有効にして inetd を再起動して、それとお話しする
クライアントを書いてみるといいでしょう。

以上、IPv6 アプリを書いたことのない者 (IPv6 を使ったことさえ
ない) のたわごとでした。

No. 1662 # 68user 2001/01/25 (木) 21:47:20
しつこくて失礼。perl5.005_03 に Socket6 モジュールを入れてみました。

>>1660 68user
> とりあえず perldoc Socket6 してみてください。サンプルの
> ひとつでも載っているのではないでしょうか。
ばっちり載ってますね。これをちょいといじって
    % netstat -a | grep tcp6 | grep echo
    tcp6 0 0 *.echo *.* LISTEN
なサーバにつなげようとしたら、
    Can't load '/home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so'
    for module Socket6: /home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so:
    Undefined symbol "in6addr_any" at /usr/local/lib/perl5/5.00503/i386-freebsd/DynaLoader.pm
    line 169.
だそうで。原因究明はまた後日…と言いたいところだけれど、
こりゃ僕のレベルではいかんともしがたいですな。

No. 1663 # 68user 2001/01/25 (木) 22:04:27
あーしつこい。でも初 IPv6 体験の記念に (やってることは
しょぼいなぁ)。

4.1-RELEASE あたりなら、telnet も IPv6 ready なので、
    % telnet ::1 echo
で IPv6 で localhost の echo サーバとお話できます。
netstat で tcp6 なコネクションが張られていること、
tcpdump で IPv6 なデータグラムが流れていることを
確認してください。
    % tcpdump -i lo0
    21:56:30.055419 localhost.1206 > localhost.echo: . ack 5 win 57344 (DF) [tos 0x10]
            4510 0028 0eca 4000 4006 2df4 7f00 0001
            ...
    21:54:41.404023 localhost.1204 > localhost.echo: S 705795707:705795707(0) win 16384 <mss 16324>
            6000 0000 0018 0640 0000 0000 0000 0000
            ...
先頭1バイトが4なのが IPv4、6 が IPv6 です。

No. 1664 # gixs 2001/01/25 (木) 22:09:21
> この画面なのですが、AIXのバージョンが4.2.1の為に
> smitty mkclientで表示される画面が、
> 「* NIS クライアントを開始する時期両方」
> しか、表示されないのです

確認しました。
となると、ブロードキャストでNISサーバを見つけるはずですね。

> >ypcat passwdが応答の無い時、
> >ping [NISサーバのホスト名]
> >の応答はあるのでしょうか?
> 試して見たのですが、応答ありませんでした。

ローカルの/etc/hostsにNISサーバのエントリがあっても、応答無しですか?

あまり引き延ばして、却って失望が大きくなってしまうのが辛いので、
状況をまとめます。

/etc/hostsにNISサーバのエントリがあるとして、

1. ping [NISサーバのホスト名]が応答なし
少しだけ脈あり。名前解決の順序がおかしいようです。
FAQの1.800(http://www.landfield.com/faqs/aix-faq/part3/)
にありますが、環境変数NSORDERがあるとか?(可能性は低いですが)

2. ping [NISサーバのホスト名]が応答あり
今さら、この結論も気が引けますが、
ypwhich [NISサーバのIPアドレス]
でうまくいくなら、それで結果オーライにしてしまってよいのではないでしょうか。

No. 1665 # kaori [E-mail] 2001/01/26 (金) 09:28:12
  kaoriです。

  ご丁寧な回答ありがとうございました!
IPv6の環境は整っています(OCNの実験に参加しています)ので、
教えて頂いたのを参考に色々試してみます!

> というわけで、IPv6 only のプログラムは簡単に書けますが、
> 書いちゃいけません。IPv4/v6 両方で動くようなプログラムを
> 作るべきです。

  本当にその通りですね。 アドバイスありがとうございます。

  今後もよろしくお願いします!

No. 1666 # rosegarden 2001/01/26 (金) 16:01:58
ちょっと便乗して試して見たのですが、
>>1660 68user
> - perl が IPv6 に対応しているかどうか。perl-5.005_03 なら多分
> 無理。5.6 か 5.7 で対応したかもしれません。Socket6 というのを
> 使えば 5.005_03 でもいけるのかもしれませんが、僕は試したことが
> ありません。
なんか、FreeBSD の /usr/bin/perl は IPv6 に対応してない感じですね。
4-stable も 5-current(こちらは perl 5.6.0)も試しました。
perldoc Socket6 して出て来る IPv6 の daytime のサンプルを試しましたが、
socket: Protocol not supported
などというエラーを返します。もちろん、inetd.conf 書き換えて、IPv6
の daytime は使えるようにしてあるのですが。一方、添付の C プログラムは
うまくいくので、設定ミスではないと思うのですが。だいたい
telnet ::1 13 もちゃんと反応しますし。

>>1665 kaori
うちでは、localhost しか試せないのですが、kaori さんのところでは
perl でもうまく行っていますか? perl 自体にも IPv6 のパッチあてないと
いけないのでしょうか? とりあえず、Socket6 使って嬉しいのは IPv6/IPv4
両用に書かれたスクリプトでも動作する程度しかありませんね。うちの場合。
KAME パッチをあてて perl を make してみようとも考えましたが、
perl の開発スピードの方が早すぎるようで、パッチが追従しきれてません。

どなたか、うまくいったという方がいらっしゃったら、教えてください。

#include <stdio.h>
#include <string.h>
#include <err.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int
main(int argc, char *argv[])
{
    struct addrinfo hints, *res, *res0;
    int error;
    int s;
    const char *cause = NULL;

    memset(&hints, 0, sizeof(hints));
    hints.ai_family = PF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    error = getaddrinfo("localhost", "daytime", &hints, &res0);
    if (error) {
        err(1, "%s", gai_strerror(error));
    }
    s = -1;
    for (res = res0; res; res = res->ai_next) {
        char hostname[NI_MAXHOST], servname[NI_MAXSERV];

        s = socket(res->ai_family, res->ai_socktype,
            res->ai_protocol);
        if (s < 0) {
            cause = "socket";
            continue;
        }
        if (getnameinfo(res->ai_addr, res->ai_addr->sa_len,
            hostname, NI_MAXHOST, servname, NI_MAXSERV,
            NI_NUMERICHOST | NI_NUMERICSERV) < 0 ) {
            err(1, "getnameinfo");
        } else {
            printf("connecting to %s port %s...\n", hostname, servname);
        }
        if (connect(s, res->ai_addr, res->ai_addrlen) < 0) {
            cause = "connect";
            close(s);
            s = -1;
            continue;
        }

        break;
    }
    if (s < 0) {
        err(1, cause);
    } else {
        char buff[256];
        memset(buff, 0, sizeof(buff));

        if (recv(s, buff, 256, 0) < 0) {
            err(1, "recv");
        }
        printf("%s\n", buff);
    }
    freeaddrinfo(res0);

    return 0;
}

No. 1667 # rosegarden 2001/01/26 (金) 16:38:08
>>1666 rosegarden
> なんか、FreeBSD の /usr/bin/perl は IPv6 に対応してない感じですね。
> 4-stable も 5-current(こちらは perl 5.6.0)も試しました。
> perldoc Socket6 して出て来る IPv6 の daytime のサンプルを試しましたが、
> socket: Protocol not supported
> などというエラーを返します。

原因が分かりました。ああ、余計なポストするんじゃなかったな。
FreeBSD の /usr/bin/perl はちゃんと IPv6 対応していますね。
私の場合 ports で Socekt6 インストールしたのですが、ちゃんと動きました。

ところで、Socket6.pm 持っている人は、サンプルが次のようになっていませんか?

use Socket;
use Socket6;

@res = getaddrinfo('hishost.com', 'daytime', AF_UNSPEC, SOCK_STREAM);
$family = -1;
while (scalar(@res) >= 5) {
        ($family, $socktype, $proto, $saddr, $canonname, @res) = @res;

        ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV);
        print STDERR "Trying to connect to $host port port $port...\n";

        socket(Socket_Handle, $family, $saddr, $proto) || next;
(以下略)

投稿した C プログラム眺めていて気がついたのですが、
        socket(Socket_Handle, $family, $saddr, $proto) || next;
って
        socket(Socket_Handle, $family, $socktype, $proto) || next;
のミスじゃありませんか?

# なんで投稿した直後に気が付くんだろう。
# 私の勘違いかなぁ? 最近ぼけているし...。

ちなみに、私の場合次のようにしたら、スクリプトはうまく動きました。
環境は 4-stable + perl 5.00503 + Socket6 です。

#!/usr/bin/perl
use Socket6;
use Socket;

@res = getaddrinfo('localhost', 'daytime', AF_UNSPEC, SOCK_STREAM);
$family = -1;

while(scalar(@res) >= 5) {
    ($family, $socktype, $proto, $saddr, $canonname, @res) = @res;
    ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV);

    print STDERR "Trying to connect to $host port port $port $family...\n";

    socket(Sock, $family, $socktype, $proto) || die "socket: $!";
    connect(Sock, $saddr) && last;

    close(Sock);
    $family = -1;
}
if( $family != -1 ){
    print "connected to $host port $port\n";
    while( defined($line = <Sock>) ){
        print "$line\n";
    }
    close(Sock);
}
exit;

# 穴があったら入りたいです。

No. 1668 # rosegarden 2001/01/26 (金) 17:10:37
>>1667 rosegarden
そうだ。補足です。下のスクリプトですが、
> socket(Sock, $family, $socktype, $proto) || die "socket: $!";
この部分の die 云々のところは next にして
> socket(Sock, $family, $socktype, $proto) || next;
とすると IPv6/IPv4 の daytime クライアントになります。私の場合には
最初から、/etc/rc.conf に ipv6_enable="YES" が入っているのと、
デバッグの意味もあって、上の die を入れておいただけです。

socket の三番目の引数は SOCK_STREAM とかそういうのが入ります。
私がはまったのは、サンプルをコピー & ペーストして書き換えたものを
使っていたからです。CPAN にある Socket6 は直っているかも知れません。
(でも、ダウンロードしたのは昨日の夕方ですが。)

# コピー & ペーストなんて、安直なことしたバチがあったんですね。

上のように直して、inetd.conf で IPv4 の方だけ有効にしておくと
% perl daytime6.pl
Trying to connect to ::1 port port 13...
Trying to connect to 127.0.0.1 port port 13...
connected to 127.0.0.1 port 13
Fri Jan 26 16:59:50 2001

という感じで、IPv6 が有効だと
% perl daytime6.pl
Trying to connect to ::1 port port 13...
connected to ::1 port 13
Fri Jan 26 17:01:16 2001

になります。IPv6 見てから、IPv4 見ると言うのは、システムによっては
変わるのでしょうか? とりあえず、うちの場合は telnet も ftp もこの順番です。

# しかし、なぜ投稿してから気がつくんだろう??
# 68user 様ならびに皆様、再三のゴミ書き申し訳ありません。

No. 1669 # 68user 2001/01/26 (金) 17:39:43
>>1667 rosegarden
> 私の場合 ports で Socekt6 インストールしたのですが、ちゃんと動きました。
うちの 4.2-STABLE だと
>>1662 68user
> Can't load '/home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so'
でしたが、会社の 4.1-RELEASE だとうまくいきました。うちの環境が
変だったのかもしれません。

>>1667 rosegarden
> socket(Socket_Handle, $family, $saddr, $proto) || next;
> って
> socket(Socket_Handle, $family, $socktype, $proto) || next;
> のミスじゃありませんか?
む、まさにそこではまってました。それを直すと動いたのですが、
この Socket6 って変じゃないでしょうか? 以下の echo クライアントが
デッドロックしてしまうようです。
    
    #!/usr/bin/perl
    use Socket6;
    use Socket;
    
    @res = getaddrinfo('localhost', 'echo', AF_UNSPEC, SOCK_STREAM);
    $family = -1;
    
    while(scalar(@res) >= 5) {
            ($family, $socktype, $proto, $saddr, $canonname, @res) = @res;
            ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV);
            print STDERR "Trying to connect to $host:$port $family...\n";
            socket(Sock, $family, $socktype, $proto) || die "socket: $!";
            connect(Sock, $saddr) && last;
            close(Sock);
            $family = -1;
    }
    if( $family != -1 ){
            select(Sock);
            $|=1;
            select(STDOUT);
            print "connected to $host port $port\n";
            print Sock "test!\n";
            print <Sock>;
            close(Sock);
    }

で、
    print <Sock>
の部分を
    $len = read(Sock,$buf,6);
    print "len=$len\n";
    print "buf=$buf";
とかすれば動きますが、
    $len = read(Sock,$buf,7);
だとダメです。内部でバッファリングしちゃってるのかなぁ?

>>1668 rosegarden
> IPv6 見てから、IPv4 見ると言うのは、システムによっては
> 変わるのでしょうか?
/etc/hosts のエントリ順 (::1 と 127.0.0.1 のどちらが上にあるか) に
よって変わるようです。

No. 1670 # 68user 2001/01/26 (金) 17:53:10
ぐぅ、あほだ。
>>1669 68user
> print <Sock>
そりゃ動かんわな。$buf = <Sock>; print $buf か
print scalar(<Sock>) でした。失礼。

No. 1671 # 68user 2001/01/26 (金) 17:58:46
>>1667 rosegarden
> socket(Socket_Handle, $family, $socktype, $proto) || next;
> のミスじゃありませんか?
で、これどうしましょうかね。
    Hajimu UMEMOTO <ume@FreeBSD.org>
宛に投げればよきにはからってくれるでしょうけど、僕が連絡しても
いいですし、rosegarden さんが既に連絡済みであればそういうことで。

No. 1672 # rosegarden 2001/01/26 (金) 21:18:13
すみません、ちょっと横になっていました。
>>1671 68user
> Hajimu UMEMOTO <ume@FreeBSD.org>
> 宛に投げればよきにはからってくれるでしょうけど、
68user さんお願いできますか? ちょっと今はメール出せません。

それから ::1 と 217.0.0.1 について有難うございました。

No. 1673 # rosegarden 2001/01/26 (金) 22:05:56
>>1671 68user
サンプルのミスといえば、
>>1666 rosegarden
の C プログラムは man 3 getaddrinfo と man 3 getnameinfo
して表示されるサンプルをほとんど借用して書いたのですが、
man 3 getaddrinfo の方のサンプルも些細なところで typo
があります。
                      if (error) {
                                      err1(1, "%s", gai_strerror(error));
                                      /*NOTREACHED*/
                      }
err1 は err の typo ですね。
まぁ、こちらはリンクエラーになるので、はまることは絶対にないかと
思いますが。
# こちらも cvsup したソース見たのですが、直っていないですね。
# cvsup したのは昨日の晩ですが。

No. 1674 # ume [E-mail] 2001/01/26 (金) 22:28:30
I'll fix the typos around samples in getaddrinfo.3 and Socket6.pm.
Thanks!

No. 1675 # itojun 2001/01/27 (土) 00:50:28
be sure to report typos to either *BSD bug database, or KAME bug database.
otherwise they won't get fixed.

No. 1676 # rosegarden 2001/01/27 (土) 01:19:07
>>1674 ume
ume さん。お忙しいのにお手間かけてすみませんでした。
今後、気づいた点があれば、きちんと send-pr しますので、
>>1675 itojun
itojun さん。お忙しいのに、すみません。
これより www.kame.net に行って send-pr しますので、
今晩中にしますので、お時間ください。

それから、なにやら、ぶしつけな書き方で済みませんでした。

No. 1677 # rosegarden 2001/01/27 (土) 01:38:18
>>1675 itojun
>>1676 rosegarden
http://www.kame.net/dev/cvsweb.cgi/kame/kame/kame/libinet6/getaddrinfo.3
ああ、大変申し訳ございません。
以後、確認がとれ次第即時に send-pr 致します。

No. 1678 # 68user 2001/01/27 (土) 03:03:19
>>1672 rosegarden
ume さんにメール出しておきました、と書こうと思ったら
既に解決している…。

せっかくなので IPv6 ネタでも書きますか。その前にだいぶ
勉強が必要ですけれども。
    http://playground.iijlab.net/iij.news/
    http://www.running-dog.net/bsd/40/ipv6.html

No. 1679 # rosegarden 2001/01/27 (土) 18:52:05
>>1678 68user
> せっかくなので IPv6 ネタでも書きますか。その前にだいぶ
> 勉強が必要ですけれども。
是非ともお願いします。これを機会に私も IPv6 について勉強したいと
思っています。

No. 1680 # kikizo 2001/01/28 (日) 11:27:10
はじめまして。知人の会社の話なんですが、自社サーバ(NT)で
HPを公開しています。先日、日本語ドメインを多数取得し、
それらで今公開しているページにアクセスできるようにしたいそうです。
そこで、以下の質問なんですが...

1.複数のドメイン名で同じトップページにアクセスさせたい場合、
ネームサーバ登録時に同じIPを設定することでよいのでしょうか?

2.トップページ以の場合は(例えば、"www.***.com"と
"www.$$$.co.jp/***/***.htm"で同じページにアクセスさせたい場合)
どうすればよいのでしょうか?専門の業者に頼むべきでしょうか?

こちらの掲示板では、場違いな質問ですが、どなたか教えてください。
ここで聞いたほうがいいよ、という情報でもかまいません。
よろしくお願いします。

No. 1681 # 68user 2001/01/28 (日) 17:27:45
>>1680 kikizo
> 1.複数のドメイン名で...同じIPを設定することでよいのでしょうか?
そうです。

> 2.トップページ以の場合は...
バーチャルホストの設定次第でいかようにもできます。どんな
web サーバを使っているかは知りませんが、解説本を数冊買って
熟読すれば可能でしょう。時間と手間を惜しむなら業者に頼む
べきですね。

それはそれとして、一番気になるのは
> 日本語ドメインを多数取得し、それらで今公開しているページに
> アクセスできるようにしたい
これって現状で可能なんですか? 現在日本語ドメインのサービス
を行っている DNS は存在しないと認識しているのですが。
# http://www.onamae.com を見ても何も書いてないし。

あと、jpnic/apnic/internic で使用する文字コードが全然違う
という問題があるそうですが (詳しくは知らない)、ここらへん
どうなっているんでしょうね。

No. 1682 # kikizo 2001/01/29 (月) 12:34:52
>>1681 68user
68userさん、ありがとうございました。
おっしゃるとおり、日本語ドメインは、今は登録だけで使えませんよね。
いつから実際に運用されるのか全く未定だし、最悪何らかのトラブルで
登録したドメインが使えない可能性もあると、某登録代行業者のページに
書いてありました。
そんなわけで、時間はたっぷりありそうなので、ひとつ勉強してみます。

No. 1683 # mimishiro [E-mail] 2001/01/30 (火) 13:45:16
誰か知識のある方、教えてください!
幾つかのサーバーに2つのC言語プログラムを使う権限を与えて
共有ファイルを変更更新させるようなプログラムの例があれば
教えてください。それとそれと、その時サーバーにコンパイラを
持たせなくてもプログラムを動かすことはできるのですか?
何もかもわかりません。先輩方、どうかこんな低レベルな者に
ご指導くださいますよう、よろしくお願い申し上げます。(ミミシロ)

No. 1684 # moe 2001/01/30 (火) 23:55:53
はじめましてメールについてお聞きしたことがあります。
mailxやsendmailで送信したメールでアドレスが存在しなかった場合
そのメール自身はどうなるのでしょうか?
やっぱりサーバーの送信ユーザーに返信されるのでしょうか?
よろしくお願いします。

No. 1685 # rosegarden 2001/01/31 (水) 10:10:02
68user さん、お忙しいみたいですね。
>>1684 moe
> mailxやsendmailで送信したメールでアドレスが存在しなかった場合
> そのメール自身はどうなるのでしょうか?
> やっぱりサーバーの送信ユーザーに返信されるのでしょうか?

私は MTA としては sendmail 以外には使ったことはありません。その場合に
話は限定されますが、基本的にユーザに返送されます。
ただし、リトライ設定がしてある場合には(デフォルトは 7 日)は再送を試みます。
ただし、それは、宛先ホストが DNS などにより存在が確認されている場合の話です。
もしも、DNS で引けないと即時に返送されたと思います。
一口に「アドレスが存在しなかった」といっても
(1) ドメイン部が存在しない。MX フィールドの検索の失敗
(2) ユーザが存在しない。
(3) 存在しているが、サーバが落ちていて、メールが受け取れない
などといった状況があります。

問題は、差し出したユーザが存在しない場合で、これはちょっと分かりません。
それから、そういうメールがどうなるかですが、
8 年くらい前に、内部ネットワークの変更のあったドメインにメールを出した
ことがあり、宛先ドメインのポストマスターから
「ちゃんと宛先を確認してください」というメッセージとともに
私の送ったメールが添付されていたことがあります。
ポストマスターが手動でメールを返送して来たことになります。
(私のメールの本文は、テキストエディタのファイル挿入かなんかでそ
のメールにインクルードされていた形跡があったので、そう判断したのです。)
ちなみに、うちのネットワークの場合、エラーを起こしたメールはヘッダーだけ
私に全部到着するようになっています。単純に postmaster 宛のメールを
自分に forward しているだけですが...。

>>1683 mimishiro
> 幾つかのサーバーに2つのC言語プログラムを使う権限を与えて
> 共有ファイルを変更更新させるようなプログラムの例があれば
> 教えてください。
次の情報が必要かと思います。
(1) サーバのオペレーティングシステム。最低でも NT か UNIX かは要ります。
以下は UNIX だとします。NT だと、少なくとも私は分かりません。
(2) 「共有ファイル」というのは何で実現していますか? nfs でしょうか?
(3) 「2つのC言語プログラム」というのは、簡単にどんな役割や機能を
もっているのでしょうか?
(4) 「変更更新」の意味をもうすこし詳しく。すべてのサーバに同じ
内容のファイルを共有させるように「変更更新」させるのか?
あるいは、サーバごとに違う情報を持たせるように「変更更新」して、
すべてのサーバに共有させるようにするのか?
> その時サーバーにコンパイラを 持たせなくてもプログラムを
> 動かすことはできるのですか?
コンパイル済なら、動かすことはできます。ところがサーバごとに
アーキテクチャが違う場合には、持たせる必要はなくても
アーキテクチャごとに対応するコンパイラでコンパイルしておく必要は
あります。アーキテクチャが同じでも FreeBSD/i386 と Linux/i386 では
違う実行ファイル形式になるので、それも考慮に入れる必要があります。
コンパイラがいらなくても、ダイナミックリンクライブラリを使うような
ケースだとライブラリ自体をインストールする必要があります。
> 何もかもわかりません。
ご謙遜だと思われますが、上記のようなケースが考えられるので、
まったく何もかも分からないのでは、答えを得られても手も足もでないかも
しれません。運良く、目的にあったプログラムを見つけられても
最低限 ./configure 一発で済むようなソフトのビルドをした経験が
ないと実際の運用は難しいように思われます。サーバの編成次第では
実行ファイルをコピーしてすまないかもしれないからです。

# まあ、前座の回答と言うことで、とりあえずこれで間に合わせてください。

No. 1686 # 68user 2001/01/31 (水) 23:19:28
>>1685 rosegarden
うーん、SMTP サーバの管理をしたことはありませんが、
    (1) DNS サーバにアクセスできない
    (2) DNS サーバにアクセスした結果、存在しないドメイン/ホストで
            あることがわかった (名前解決できない)
    (3) DNS サーバにアクセスした結果、存在するドメイン/ホストだが
            (名前解決できた) 、相手先/中継先の SMTP サーバに接続できない
    (4) 相手先/中継先の SMTP サーバに接続したが、ユーザが存在しない
1,3 は再送し、2,4 は即座にエラーメールが返ってくる、かなぁと
経験上思っているのですが。試したわけではありません。

# とはいえ、やっぱり sendmail だから、こんなに単純な話では
# ないだろうなと想像してたりします。

> 問題は、差し出したユーザが存在しない場合で、これは
> ちょっと分かりません。
相手先の SMTP サーバから
    From: Mail Delivery Subsystem <MAILER-DAEMON>
なメールが返ってくると思います。FreeBSD+sendmail なら
/usr/libexec/sendmail/sendmail が返しているようです。

自分が SMTP サーバに指定しているユーザ宛のメールなら、
SMTP で
    RECT TO:<unknown@bar.com>
とする時点でエラーになるので、メーラー自家製のエラー
メールもどきが返ってくるか、あるいはメーラーがエラー
メッセージを出して終わりかもしれません。

No. 1687 # Q駒田 [E-mail] 2001/02/01 (木) 15:17:01
Motifの質問なのですが,誰か分かる方がいればお願いします.
XtPopupでPopup画面を何個も画面表示している状態です,その
画面のOKボタンをクリックすると,画面が消去するする様にした
いので,XtPopdown(Widget)関数を使いたいのですが,複数画面
なので そのWidgetをゲットしてくれる関数は無いでしょうか.
知っていたら教えてください.

No. 1688 # eio [E-mail] 2001/02/02 (金) 01:49:21
UNIX(ソラリス)において、Cシェルまたはbシェルで一般ファイルのNULL文字を1バイト英数字(スペースを含む)に置き換えることができるのでしょうか?だれか知っていたらおしえてください。※1バイト英数字(スペースを含む)をNULL文字に置き換えることはできるとおもうのですが・・・

No. 1689 # ふにふに [URL] 2001/02/02 (金) 08:33:42
はじめまして。x68030にNetBSDを入れようと思っているのですが、どうも調子が悪いです、どなたか上手くいった方いましたら教えて下さい。
今、NetBSD1.4.3でチャレンジしているのですが、boot後、MMUのエラーが出てハングします。MPUはMC68030に載せ変えてるのに何故??。
NetBSD本のCDだと、インストール後、設定してるといきなりハングするんです。まいったなぁ。

http://circle.excite.co.jp/club.asp?cid=q0800068

No. 1690 # おじさん [E-mail] 2001/02/02 (金) 18:54:20
はじめまして、最近unixを始めたおじさんです。
わかる方おりましたら教えてください。
あるディレクトリーの下のファイルを定期的に削除したい
しかし、特定のディレクトリー(etc.binなど)の下はさわりたくない。又 ディレクトリー名は随時作られるために固定できない

No. 1691 # 紅の猫 [E-mail] 2001/02/02 (金) 21:10:20
はじめまして。
Windowsでネットワークプログラミングを行っていますが、bzero関数がWindowsでは無いみたいです。
代わりになるようなものが、見当たらないのですが、この関数はどういう働きをするのですか?

No. 1692 # 紅の猫 [E-mail] 2001/02/02 (金) 21:15:10
bzeroの他に、bcopyも判りません。
こちらも教えてください。

No. 1693 # 68user 2001/02/02 (金) 22:00:19
>>1687 Q駒田
> Motifの質問なのですが
うーん、すいませんがわかりませんです。

>>1688 eio
> 一般ファイルのNULL文字を1バイト英数字(スペースを含む)に置
> き換えることができるのでしょうか?
tr '\0' X でよござんすか?

>>1689 ふにふに
> x68030にNetBSDを入れようと思っているのですが
あぁ…、68user's page なのに全然 X68000 じゃないページに
ようこそ。ですが、残念ながら全くわかりません。

>>1690 おじさん
> 削除したい
    http://X68000.startshop.co.jp/~68user/unix/pickup?rm
    http://X68000.startshop.co.jp/~68user/unix/pickup?rmdir
> ディレクトリー名は随時作られるために固定できない
固定できないとはいえ、何らかの法則性があるでしょうから、
それをキーに
    rm -rf ディレクトリ名
などなど。ということを行うスクリプトを sh や csh や perl で組んで、
> 定期的に
    http://X68000.startshop.co.jp/~68user/unix/pickup?crontab
で cron に登録しておけばよいです。簡単にやるなら、
    0 12 * * * /bin/rm -rf /target/dir/*
と書いておけば、毎日 12:00 に /target/dir/ の下にある
ファイル・ディレクトリが消されます。

>>1691 紅の猫
> bzero関数がWindowsでは無いみたいです。
bzero はゼロクリアで、bcopy はコピーです。
    http://www.freebsd.org/cgi/man.cgi?query=bzero&manpath=FreeBSD+4.2-RELEASE&format=html
bzero, bcopy は元々 BSD 系の関数です (が SystemV 系 UNIX にも
あります)。ANSI C 処理系では memset, memcpy を使います。

No. 1694 # 紅の猫 [E-mail] 2001/02/03 (土) 10:24:03
>>1693 68user
ありがとうございます。
どうにか、http-client-1が動くようになりました。

No. 1695 # けんす 2001/02/04 (日) 00:23:41
こんばんわ。先日はどうもでした。

掲示板の改ページのとこがいまいちよく分からないのですが、
とほほラウンジの

http://www.wakusei.ne.jp/twn/wwwlng.cgi?print+199901/99010207.txt

68userさんの、スマートでよさげなので参考にしたいのですが、
「次」だけでなく「前」と、「以上 31 から 58 番目の発言です。」
みたいなの付けたいのですが、まったく分からないです。。
よかったらご教授くださいませ、、。

No. 1696 # 68user 2001/02/04 (日) 01:09:16
>>1695 けんす
B-Cus 1999/01/27(水) 03:02:50 の形だと、
    発言が 40 件あるときに start=30 とすると「次の10件」が
    表示されない (41件目かどうかで判定しているから)
という問題点があるので、ちょっと構成を変えて、
    $start=1;
    $count=1;
    $next_page_exist = 0; # 次ページが存在するか
    $messages_per_page = 10; # 1ページ 10件ずつ表示
    if ( $ENV{QUREY_STRING} =~ m/start=(\d+)/ ){
        $start = $1;
    }
    open(IN,"data.txt");
    while (<IN>){
        if ( $count >= $start ){
            ($name,$content) = split(/,/,$_);
            print "名前:$name 内容:$content<br>\n";
            if ( $count == $start+$messages_per_page ){
                $next_page_exist = 1;
                last;
            }
        }
        $count++;
    }
    if ( $start != 1 ){ # 1件目から表示しているときは「前のxx件」を出さない
        printf qq(<a href="hoge.cgi?start=%d">前の$messages_per_page件</a>),
            $start-$messages_per_page ? ;
    }
    if ( $next_page_exist == 1 ){ # 次ページが存在しない場合は「次のxx件」を出さない
        printf qq(<a href="hoge.cgi?start=%d">次の$messages_per_page件</a>),
            $start+$messages_per_page;
    }
    printf "以上 %d から %d 番目の発言です。\n", $start, $count-1;
という感じになります。動かしていないのでバグがあるやも
しれません。

あと、start=7 のときに「前の10件」が hoge.cgi?start=-3 と
なりますが、これは宿題ということで。

No. 1697 # BOSS [E-mail] 2001/02/04 (日) 16:53:51
私は、ネットワーク管理をやっている者ですが・・どうしても原因の分からない問題にぶつかったので、分かる方いたら教えてください。
    とある、プロバイダーのMailサーバーを管理しているのですが、全国いろんな環境からサーバーにMailを取りにきます。OCN-エコ-128kで接続してくるお客さんだけが、POPを取りにくるときタイムアウトしてしまいます・・同一症状が5カ所で出ております。トラフィック上は何の問題もなく、症状が現れたのは、4日前サーバーセンターに異常が出て、同一センター内にサーバーを設置している別会社がネットワーク構成を変えてからです。 弊社Mail+DNSサーバー(同一マシーン)に使っているOSはFREE-BSD3.3 qpopper3.1.2を利用中・・。
    問題の出ているCliantからTracertしても異常は無く、DNSも問題なく引けてます、WWWは問題なく好調です・・。
    関係有るかは分かりませんが、OCNのその5カ所は211.***.***.***のネットワークになっています。 それ以外のネットワークのOCNでは問題は起こっておりません。 OCN側は、異常は無いと言い張っているので、原因がさっぱり分かりません・・。 
    どなたか、分かる方なにが考えられるか教えてください。

No. 1698 # 68user 2001/02/04 (日) 21:34:03
>>1697 BOSS
> CliantからTracertしても異常は無く
> DNSも問題なく引けてます、WWWは問題なく
qpopper が IP アドレスから FQDN を逆引きしようとして、
逆引きできないか、タイムアウトしている、というのは
考えられませんか? qpopper は何かログを吐いてませんか?

No. 1699 # けんす 2001/02/05 (月) 03:10:16
>>1696 68user
ばっちりでしたー。
すばらしいっす。感謝です68userさん。

http://www.kensu.com/bin/plywood.php
ごめんなさい。Perlじゃないです。
いつもここの掲示板、参考にしてますm(_ _)m

> あと、start=7 のときに「前の10件」が hoge.cgi?start=-3 と
> なりますが、これは宿題ということで。

あまり自信ないですけど、、

if ( $start != 1 ){ # 1件目から表示しているときは「前のxx件」を出さない

の部分を

if ( $start - $messages_per_page >= 1 ){

にしてみたら、いちおうできたみたいです、、
もしよかったら、正解を教えてくださいませ。

あとちょっと気づいたことなんですが、
「次へ」で見てみると、前のページの一番最後にあった発言が
また最上部へでてくるのですが、これは仕様ですか??
ちゃんと次のページへきたという安心感があってべつに問題ないのですが、
いちおうきいてみました。

ではー

No. 1700 # 68user 2001/02/06 (火) 00:48:42
>>1699 けんす
ああそうか…、ログの先頭が新しい書き込みで、最後が古い
書き込みなのね。僕は、この方式に start=xx 式の管理を
組み合わせるのはまずい仕様だと思います。

例えば、現在
    http://www.kensu.com/bin/plywood.php?start=30
とすると、No.64〜34 が表示されます。

しかし、今後書き込みがあると、同じ URL でも No.65〜35、
No.66〜36 とだんだんずれていきます。これでは特定の話題を
指して URL を示すことができません。

一方、
    http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=601-700
のように、古い順から数えて 601〜700 であれば、今後
いくら発言があろうと発言内容は変わりません。

# この点を仕様として考えておられるのでしたら失礼。

> if ( $start - $messages_per_page >= 1 ){
> にしてみたら、いちおうできたみたいです
これだと
    http://www.kensu.com/bin/plywood.php?start=10
のときに、「前」リンクが表示されません。まぁ、これを
バグと取るか仕様と取るかは人によるかもしれません。

> 前のページの一番最後にあった発言がまた最上部へ
> でてくるのですが、これは仕様ですか??
いえ、バグです (笑)

あと、ソースを公開されておられるのは大変素晴らしいですね。
僕は php を使ったことはありませんが、概要くらいは知ることが
できました。

# そして、php であっても、一つのスクリプトにまとめようとすると
# 結局 perl 的な書き方になってしまうのだなぁと思いました。

No. 1701 # TK [E-mail] 2001/02/07 (水) 20:41:41
質問です。CGIプログラムから別のCGIプログラムは実行できますか?
リンクチェッカーをCGIで作ったのですが、ブラウザ上から実行できる
ようにしようと思ってボタンを作ったのですが、全くだめでした。
誰か知っている人がいたらおしえてください。お願いします。

No. 1702 # 68user 2001/02/08 (木) 01:04:31
>>1701 TK
> 質問です。CGIプログラムから別のCGIプログラムは実行できますか?
情報が何も書いてないので、できます、としか言いようがないです。

No. 1703 # rosegarden 2001/02/08 (木) 05:12:49
以前に 4-stable は不安定と言いましたが、
最近は安定していますね。少なくともうちでは安定しています。
新しいデバイスドライバ試す程度なら、大丈夫でしょう。
ただし、2/1 から 2/4 までの間のソースは ipfw にバグが
あるのでその期間のソースからはビルドしない方が良いです。

No. 1704 # 68user 2001/02/08 (木) 10:20:18
>>1703 rosegarden
> 以前に 4-stable は不安定と言いましたが、最近は安定していますね。
もう SNAPSHOT ってなくなったんでしたっけ。freebsd-stable も
流し読みなので (読まずに捨てているとも言う)、最近は恐くて cvsup
できません。

No. 1705 # Sakiik [E-mail] 2001/02/08 (木) 13:29:28
はじめまして。
Sakiikaと申します。
長文失礼します。

このたび、UNIX_Cを触ることになってHPを参考に
させていただいているのですが、ライブラリルーチンの
opendirを使ったプログラムを書いたのですが、
while ((dir = readdir(dp)) != NULL ){
でコンパイラエラーが出てしまい、うまく動作しませんでした。
原因を調査したところ、
struct direct *dir;

struct dirent *dir;
に変更したら動作するようになりました。
これは、UNIX環境によって、
struct directとstruct direntの2つが定義されているのでしょうか。

初歩的な質問ですが宜しくお願いします。

No. 1706 # rosegarden 2001/02/08 (木) 15:29:03
>>1704 68user
>もう SNAPSHOT ってなくなったんでしたっけ。
いや、まだあります。ただここ数日ビルドに失敗していますね。
したのは jpSNAP からのログです。
>===> etc/sendmail
>rm -f freebsd.cf
>(cd /usr/src/etc/sendmail && \
> m4 -D_CF_DIR_=/usr/src/etc/sendmail/../../contrib/sendmail/cf/ \
> /usr/src/etc/sendmail/../../contrib/sendmail/cf/m4/cf.m4 \
> freebsd.mc ) > freebsd.cf
>chmod 444 freebsd.cf
>+ touch /.buildworld_done
>+ tar cyf /4.2-STABLE-20010205-JPSNAP.tar.bz2 -C /usr/obj .
>tar: can't exec bzip2 : No such file or directory
>release releng4 ends at 2001/02/05 04:32:32
これ見ると、make buildworld は成功しているようです。ただ、
/usr/obj のパック(これは通常 make world する際には関係ありません。
jpSNAP サービス独自の処理でしょう)に失敗しているだけです。
これはメールしておきました。
>freebsd-stable も流し読みなので
最近はとくに留意する点はありません。昨年暮れと同様の方法で
make world 出来ると思います。一方 -current はちょっと、devfs がデフォルトで
採用されるようになったので、devfs 関係の記事を追ってないと
辛いかも知れません。ま、辛いとは言っても、ないデバイスは rc.devfs の
中でシンボリックリンク張れば良いだけですが。

No. 1707 # 雪ん子 [E-mail] 2001/02/08 (木) 16:27:38
雪ん子と申します。
初めて質問させていただきます。

CGI初心者ですが、参考書とWEBを参考にデーターベース(検索)なるのを
作成しています。
データはCSV形式で作成しており、ある条件に合致したものを表示する
ようにしています。
表示されたものにはリンクを貼りそれぞれのページを表示するように
しました。
しかし、情報が更新になる度に、リンク先のページのhtmlとデータの
CSVファイルの両方を更新しないといけないという二重でまになって
しまいます。
そこで、直接データベースからデータを引っ張り出して、リンク先の
ページを作成することは可能でしょうか。

因みに、こちらにテスト環境があります。
http://www.oitamirai.co.jp/cgi/search.html

No. 1708 # はじめ [E-mail] 2001/02/09 (金) 09:25:49
プロセス間で共有できるメモリの使い方を教えてください。
(システムコールshmget、shmat、shmdt以外で。)

No. 1709 # 68user 2001/02/10 (土) 01:02:31
>>1705 Sakiik
direct は dirent の typo です。こういうときは、man readdir
しましょう。正しい引数の数、型、戻り値、必要な include file
などの情報が書いてあります。

>>1706 rosegarden
ああ、なるほど。http://www.jp.freebsd.org/snapshots/ ですね。
僕の言った snapshot は、
    「stable の中で、比較的安定していた時点のものにタグを打ったもの」
という意味だったのですが、昔はそういうのがありません
でしたか? (記憶違いかな…)

>>1707 雪ん子
> 表示されたものにはリンクを貼りそれぞれのページを
> 表示するようにしました。
テスト環境ではリンク先に飛ぶことはできないのですね。リンク先の
HTML がどれだけの情報を含んでいるのか判断できないので、どういう
ふうにするのが最適なのかはわかりません。

とりあえず検索時に必要なデータと、リンク先にあるデータを全て
1つの CSV に突っ込んで、検索も表示も両方とも CGI でやってみては
どうですか。

# というような回答でよいのかな?

>>1708 はじめ
> プロセス間で共有できるメモリの使い方を教えてください。
> (システムコールshmget、shmat、shmdt以外で。)
shmget、shmat、shmdt 以外に共有メモリと呼ばれるものは
存在しないと思うんですが、もしかしてあったりするんでしょうか。

No. 1710 # rosegarden 2001/02/10 (土) 04:40:21
>>1709 68user
> 僕の言った snapshot は、
> 「stable の中で、比較的安定していた時点のものにタグを打ったもの」
> という意味だったのですが、
ああ、そういう意味でしたか。失礼しました。
そうなるとちょっと分かりませんです。すみません。

No. 1711 # gixs 2001/02/10 (土) 22:39:37
>>1708 はじめ

mmap(2)は共有メモリと呼べるかもしれません(現象的には共有ファイルになりますが)。
共有するには実ファイルが必要なことと、排他制御があるわけではないので、ひとつだけが書き込み、残りプロセスは読み込み専用、という場面でしか使えないかもしれませんが。

> direct は dirent の typo です。

Unixの生き字引みたいに、ここで名前は挙げられませんが、struct directがあるUnixはあったんじゃないですか?

No. 1712 # rosegarden 2001/02/10 (土) 23:43:37
>>1711 gixs
>Unixの生き字引みたいに、ここで名前は挙げられませんが、
> struct directがあるUnixはあったんじゃないですか?
言われて見れば、そんな感じしますね。
ちなみに FreeBSD の sys/dir.h みたらこんなのありました。

/*
  * Backwards compatibility.
  */
#define direct dirent
#define DIRSIZ(dp) _GENERIC_DIRSIZ(dp)

No. 1713 # nori 2001/02/12 (月) 14:03:06
FreeBSD3.2を使用していますが,ノートのPCカードのSCSIでCD−ROMを認識させたいです.カードはIODATAのPCSC−Fを使用しています.

No. 1714 # rosegarden 2001/02/12 (月) 15:54:25
>>1713 nori
> FreeBSD3.2を使用していますが,
FreeBSD 3.2-RELEASE は以前に使っていたのですが、その IODATA
のカードって新しいのでしょうか?
新しいとしたら、絶望的です。
3.2-RELEASE で PC card 類を使うには、PAO patch あてないと
無理だと思いました。もっとも、カードの抜き差しをあきらめることにして
起動時の userconfig や visualconfig 使えば、とりあえず
認識させることは出来ます。irq とか io アドレス類を指定すれば
無理矢理に使うことは場合によっては出来ます。
ただし、CD-ROM ドライブ使うごとに shutdown/boot の繰り返しになりますが。
それに、3.2-RELEASE 用の patch が今でも手に入るかどうか謎です。

都合もあるでしょうが、システム自体アップグレードするのが一番です。
3.2-RELEASE だと、fix されていないセキュリティホールも多いし、
(リリースされた後に発見された security hole のことです。)
3.2-RELEASE がでた当時の PAO patch じゃ USB デバイスの対応も
そんなに進んでいません。
(それとも RELEASE independent にパッチを当てられるのかな?)

もっとも、pccard のデータベースを自分で編集して使えるように
することは出来るでしょうし、以前にそれで乗り切った経験もあります。
しかし、トータルで見ていまさら、3.2-RELEASE なんて使うこと自体
お勧めできません。だいたい、ports なんかもほとんど使える状態じゃないし、
ports tree を更新したとしても、upgrade kit をインストールしないと
使えません。

よほどのマニアか腕前のある人でない限り 3.2-RELEASE はお勧めできません。

# でた当時は、何もかも、画期的で、安定していて、素晴らしかったんですが、
# 時間の推移というのは恐ろしいものです。

No. 1715 # 68user 2001/02/13 (火) 01:13:30
>>1711 gixs
> struct directがあるUnixはあったんじゃないですか?
それは知りませんでした。確かに 386BSD 0.0 では direct ですが、
    http://www.freebsd.org/cgi/man.cgi?query=opendir&manpath=386BSD+0.0&format=html
4.4BSD Lite2 では dirent になってますね。
    http://www.freebsd.org/cgi/man.cgi?query=opendir&manpath=4.4BSD+Lite2&format=html

参考: BSD の系譜
    http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/misc/bsd-family-tree?rev=1.38

No. 1716 # Sakiika [E-mail] 2001/02/13 (火) 09:42:46
>Readdir
ありがとうございました。

私の使用しているものでは、
struct dirent *readdir_r(DIR *dirp, struct dirent *entry);
でした。

日本語のヘルプとして参考にしたものも同じく、direntでした。
調べ方が足りなかったようです。
ありがとうございました。

参考にしたページ。
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/readdir.2.html

No. 1717 # 雪ん子 2001/02/13 (火) 10:26:36
>>1709 68user
早速の回答、ありがとうございました。

>テスト環境ではリンク先に飛ぶことはできないのですね。
私のミスでした。リンクを貼るためのソースが欠落していました。
http://www.oitamirai.co.jp/cgi/search.html

>とりあえず検索時に必要なデータと、リンク先にあるデータを全て
>1つの CSV に突っ込んで、検索も表示も両方とも CGIで
検索結果後のリンク先の表示体系は基本的に全て同じとし、店舗名や
住所の所のみを変更するようにしたいと考えています。
そこで、検索結果に表示されるものからのリンク先へのリンクの
させ方と言うか表示をさせる時のCGI(引数?)がよく分かりません。
データベースから検索結果を表示させるまでは何とか自力で出来ま
したがその後の処理がうまく出来ません。
お力添えをよろしくお願いします。

No. 1718 # 68user 2001/02/13 (火) 14:43:04
>>1717 雪ん子
おすすめは、search.cgi が
    《検索結果》
    3 件検索しました
    <a href="pickup.cgi?shopid=1>●1号店</a><br>
    <a href="pickup.cgi?shopid=3>●3号店</a><br>
    <a href="pickup.cgi?shopid=11>●11号店</a><br>
というような出力をして、pickup.cgi 側は QUERY_STRING を
解析し、shopid を取得する。それに従って CSV から該当する
行を抽出し、それを出力する、というものです。

No. 1719 # hiroshi 2001/02/13 (火) 23:34:22
始めまして
ちょっと質問して良いでしょうか?
perlでtime()等が有りますが、これだとコンマ何秒の数値が取得できないですよね?
相対的な速度を計算したいんですが何かいいモジュールが有りましたら教えてください
検索エンジン等色々探して見たんですが見つかりませんでした

No. 1720 # 68user 2001/02/13 (火) 23:39:44
>>1719 hiroshi
試してませんが Time::HiRes というのがそれっぽいです。
    http://www.cpan.org/modules/by-module/Time/
    http://www.engelschall.com/ar/perldoc/pages/module/Time::HiRes.html (*1)

> 検索エンジン等色々探して見たんですが見つかりませんでした
http://www.google.com/ で「perl time usec」で調べると
一番目に *1 のサイトが引っかかりました。

No. 1721 # hiroshi 2001/02/14 (水) 00:13:32
あ、即レスすみません
ちょっとキーが思い当たらなかったですね
perl time 時間関数
なんてやってたんですけど
さっそく組み込んで見ます
それでは今後ともよろしくお願いします

No. 1722 # hiroshi 2001/02/14 (水) 00:22:28
($seconds, $microseconds) = gettimeofday;

この部分がそうみたいですね
今ちょっと試してます

No. 1723 # のり 2001/02/15 (木) 03:53:16
私は細かい字が見えないのでUNIXを使うときに困っています.
ウィンドウズは簡単にフォントの大きさを変えられますがUNIXでフォントの大きさを変える方法がわかりません.xterm,ktermにフォントのオプションがあるようですが,どのフォントが適しているかわかりません.
単に大きくなればよいです.全体的に大きくなる簡単な方法はないでしょうか?
NETSCAPE(3.x)は設定するところがありますが,私の場合アルファベットが小さくてなぜか真っ黒になっていて見えませんどうしてでしょうか?

No. 1724 # のり 2001/02/15 (木) 04:51:43
あと,Xウィンドウをインストールして立ち上げても~/に.XdefaultsなどのXの設定ファイルがありません.どこにあるのでしょうか?
NETSCAPEのアルファベットが小さいのは解消されました.しかし,リンク部分などが真っ黒に塗られているのは解消できません.

No. 1725 # のり 2001/02/15 (木) 07:38:06
xterm,ktermのフォントの大きさを変えることができました.
またわからないことがでてきたのですが,cshからtcshにログイン時に変えたいのですがなんかコマンドがあった気がします.忘れてしまいました.

No. 1726 # 雪ん子 2001/02/15 (木) 11:00:44
>>1718 68user
68userが言われるようにしたところ、受け側のCGIの QUERY_STRING で
渡った項目を取得することが出来ました。
あとは、受け取った項目をもとに検索表示する機能を作成したいと思います。
ありがとうございました。

No. 1727 # 68user 2001/02/17 (土) 15:48:00
>>1725 のり
> xterm,ktermのフォントの大きさを変えることができました.
自己解決したとしても、掲示板に書き込んだ以上は
何をどうしたらうまくいったかを簡単に書きましょう。

> cshからtcshにログイン時に変えたいのですがなんかコマンドが
> あった気がします.忘れてしまいました.
passwd -e や chsh など。OS によって違います。

No. 1728 # gixs 2001/02/19 (月) 21:06:43
>> xterm,ktermのフォントの大きさを変えることができました.
> 自己解決したとしても、掲示板に書き込んだ以上は
> 何をどうしたらうまくいったかを簡単に書きましょう。

のり氏ではないですが。
単にコントロールキー+右クリックに気づいただけでしょう。
# 論点が掲示版での礼儀作法なら、部外者なのでノーコメント。

No. 1729 # kuro [E-mail] 2001/02/22 (木) 08:12:29
始めまして。

earthlinkのFTPツールで問題が発生したため、やむなくホームページ用データのアップロードをDOSプロンプトで行うことにしましたが、mput の確認を
はずす方法がわからなくて困っていました。
Yahoo!で検索したところこちらのマニュアルを見る事ができたので
大変助かりました。どうもありがとうございました。

クロ

No. 1730 # purine 2001/02/24 (土) 07:20:28
はじめまして。
ソケット通信についての質問ですが、
クライアントとサーバの間の回線が何らかの障害によって切れた
場合、それを知る方法を教えてください。
会社ではポート情報を取得すればいいと言われたのですが

よろしくお願いします

No. 1731 # CZ 2001/02/25 (日) 23:54:56
68userさん,他の皆さん,こんばんは。

さて,ローカルでメーリングリストの過去ログを閲覧するための便利なツールはないでしょうか。

今はメーラ(Becky)に取り込むことを考えていて,展開・取込スクリプトも完成したのですが,まだ本番の作業に移っていません。

この方式での閲覧には難点が幾つかあって,
(1) 1,000メール程度ごとに分割しなければ表示が遅くなるので,スレッドがつながらないことがままある。
(2) Plain Textで保管されるのでディスク容量が圧迫される。
(3) メモリが少ないことも影響してか,はたまたWindows上でのtar操作だからか,ログアーカイブの展開・取込に異常に時間がかかる。(これが本番の作業に至っていない理由。)

理想を言えば,あらかじめインデックスを作成しておき,閲覧分だけ逐次展開するツールがあれば便利なのですが,あるのでしょうか。Windows使いなので,Windows(含DOSプロンプト)か,cygwinか,perl・ruby等で動作することが条件です。ローカルhttpサーバを立てることも可能です。

情報調査力の足りない私にどんなことでもご教示いただけるなら幸いです。

No. 1732 # すな 2001/02/26 (月) 16:41:26
お世話になります。
uptimeをcronで動かしてマシン負荷を記録するスクリプトを作りました。
ところが生成されたログの起動時刻が同じ時間になってしまうという
状態がみつかりました。

ログ生成スクリプトの該当部分(bashスクリプト)
export LOAD=`uptime`
〜処理〜
echo $LOAD >> $LOG ← ログファイル

生成されたログの一部
12:59am up 11:36, 1 user, load average: 0.00, 0.00, 0.00
1:00am up 11:37, 1 user, load average: 0.00, 0.00, 0.00
1:00am up 11:38, 1 user, load average: 0.00, 0.00, 0.00
1:02am up 11:39, 1 user, load average: 0.00, 0.00, 0.00

これは1秒未満の実行タイミングの誤差から来ているのでしょうか?
もしそれが原因ならば、起動時に数秒waitを掛けてからuptimeを実行
することでこの現象を回避できるでしょうか?

cronは毎分実行にしていますが、毎回起こるのではなく1日の内1〜2
度程度、多分負荷の掛かっている時刻の0分に記録されているようです。
ぜひご意見をお聞かせください。

No. 1733 # 68user 2001/02/26 (月) 22:11:34
>>1731 CZ
> さて,ローカルでメーリングリストの過去ログを
> 閲覧するための便利なツールはないでしょうか。
有名どころでは mhonarc がありますね。こんなの。
    http://his.luky.org/ML/linux-users.5/msg05835.html
ただ、個人的にはあのインタフェースは大嫌いなので、mhonarc を
使うのなら自作します。前準備としては
    - 各メールの Subject、From、Date、Message-Id、In-Reply-To を拾い、DB 化
    - Date 順 (あるいは X-Sequence 順) に
              In-Reply-To がないメールはツリーの起点メール
              In-Reply-To があるメールは他のメールの子
        として、ツリー構造を作成 (1ツリー=1ファイルにする。遅いかな?)
    - Date 順 (あるいは X-Sequence 順) で、月ごと (100通単位) のツリーの起点
        一覧をリストアップ
とし、閲覧時に CGI で
    - 指定された月 (指定された 100通) のツリーの起点一覧を表示しつつ、
        対応するツリー表示
てなところでしょうか。
# って、自分で作る方法を聞いておられるのではないような気もしますが。

出来合いのものを使うなら Java House のが好きですが、
    http://java-house.etl.go.jp/ml/archive/j-h-b/037476.html
これって配布されてるものなんでしょうか。

> tar操作だからか,ログアーカイブの展開・取込に異常に時間がかかる。
tar は、先頭のインデックスを見て、目的のファイルが何バイト目から
始まるかを知ることができません (違ったっけ) ので、ランダムアクセス
には向きません。圧縮しないなら、100通単位でディレクトリを掘って
1メール=1ファイルにしておく方が案外速かったりするかもしれません。

>>1732 すな
> uptimeをcronで動かしてマシン負荷を記録するスクリプトを作りました。
> ところが生成されたログの起動時刻が同じ時間になってしまうという
> 状態がみつかりました。
とりあえず date で秒単位まで記録して、何秒に実行されているか
調べてみてはどうですか。cron は、0秒きっかりに実行してくれる
保証がなく、結構ばらつきがあるのかもしれません。

で、もし重くて遅れがでてしまうなら、それはそれで仕方がない
のかもしれません。

>>1730 purine
> クライアントとサーバの間の回線が何らかの障害によって切れた
> 場合、それを知る方法を教えてください。
物理的な切断については
    http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1299-1302
てのがありますけど、一般的には
    http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.8
ですね。

No. 1734 # すな 2001/02/27 (火) 01:32:04
> とりあえず date で秒単位まで記録して
確かにそのとおりですね。

で、早速そのようにして観察した所1時間もしないうちに、やはり前
後1秒程度の誤差が確認されました。

+1秒の時はいいのですが、-1秒の時は「xx:59:59」などとなってしま
いますので、負荷が高い時を考えて5秒程度 sleep をかます事で対
処してみます。

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

cronは結構誤差があるものなのですね。
今後cronを使うときの参考になりました。

関係ない話題ですが 午前0時と正午の表記は 00:00pm という表
記が正しいと思っていましたが、uptimeの出力では、12:00am と
12:00pm と表示されるのですね。

No. 1735 # CZ 2001/02/27 (火) 01:43:14
>>1733 68userさん
お返事ありがとうございます。

> 出来合いのものを使うなら Java House のが好きですが、
> http://java-house.etl.go.jp/ml/archive/j-h-b/037476.html
> これって配布されてるものなんでしょうか。

私もなかなか閲覧しやすいと思います。「Underconstruction」なのが残念ですが。

> tar は、先頭のインデックスを見て、目的のファイルが何バイト目から
> 始まるかを知ることができません (違ったっけ) ので、ランダムアクセス
> には向きません。圧縮しないなら、100通単位でディレクトリを掘って
> 1メール=1ファイルにしておく方が案外速かったりするかもしれません。

そうですか。SEGA BBS 過去ログ<http://x68000.startshop.co.jp/~68user/index-segabbs.html>が「データは圧縮して保管しており、リクエストがあるたびに CGI で随時展開して」いることを覚えていたので,圧縮して随時展開という手法に期待をおいていたりしました。

今は他のことにかかりきりなので,できあいのものを探していたのですが,設計の考え方は参考になりました。そのうち時間があればログをメーラに取り込んで,そのうちさらに時間があれば自作も検討します。メーラのプラグインとして作成する手もありますが,いずれにせよ今は無理です。

ところで,今さっき「tar」で全文検索したときに発見したのですが,結果画面でNo.531だけが正常に表示されませんでした。ご報告まで。

No. 1736 # SASA [E-mail] 2001/02/27 (火) 15:27:52
テープにbackupしたデータを、復元させたいのですが
コマンドの打ち方がわかりません。
教えて下さい。
UNIX若葉マークです。

No. 1737 # purine 2001/02/27 (火) 16:12:57
68userさんお返事ありがとうございます。参考になりました。

No. 1738 # purine 2001/02/27 (火) 16:52:22
ソケット通信でマルチクライアントサーバを作っているのですが
お手本にできるソースってどこかにありませんか?
プログラミング初心者ですが、要求がかなり厳しいので困ってます。

No. 1739 # 68user 2001/02/27 (火) 18:13:02
>>1735 CZ
> 「Underconstruction」なのが残念ですが。
ってどこに書いてありました?

> 結果画面でNo.531だけが正常に表示されませんでした。
    http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=531
のことでしたら、あれで正しい表示です。CZ さんが見られたときは
変な表示になってましたか?

>>1736 SASA
> テープにbackupしたデータを、復元させたいのですが
> コマンドの打ち方がわかりません。
バックアップしたときにどういうコマンドを使ったのですか?
mt? tar? dd?

>>1738 purine
> ソケット通信でマルチクライアントサーバを作っているのですが
> お手本にできるソースってどこかにありませんか?
まずは
    http://X68000.startshop.co.jp/~68user/net/
を見て、どこが足りないのか書きましょう。
# …についてもっと詳しく書いてあるソースがほしい、perl
# じゃなくて C 言語のソースがほしい、などなど。でも
# OS のソース以外のお手本は知らないなぁ。

>>1734 すな
> で、早速そのようにして観察した所1時間もしないうちに、
> やはり前後1秒程度の誤差が確認されました。
ほうほう、cron が1秒早く起動されましたか。結構いいかげん
なんですかね。お使いの OS は何でしょうか?

No. 1740 # purine 2001/02/27 (火) 18:55:24
お世話になっておりますpurineです。
C言語で書かれたソケット通信によるマルチクライアントサーバの
お手本のソースを見たいのでご存知でしたら教えていただけませんか

お手本だけじゃなくC言語のソケット通信に使う関数について書かれたページなどもありましたらよろしくお願いします

No. 1741 # 通りすがりです。 2001/02/27 (火) 19:06:34
purineさん>
職場の同僚がマルチクライアントサーバを作る時に調べていてみつけた便利そうなサイトへのリンク集だそうです。

http://www.geocities.co.jp/SiliconValley-Oakland/6682/link/LinksForWork_Edu01.html

この同僚は検索サイトで探し出したそうですから
あなたももっと探してみてはいかがでしょう。

No. 1742 # 通りすがりです。 2001/02/27 (火) 19:37:13
追加です。
こちらのサイトへのリンクもあるそうです。

http://www.geocities.co.jp/SiliconValley-Oakland/6682/link_work.html

No. 1743 # なお [E-mail] 2001/02/27 (火) 23:19:38
こんばんわ、初めまして。
以前から、UNIXのページなど凄く参考にさせてもらってます。ども。。

いきなり、質問なのですが。
あやまって/usr/share/locale/ja_JP.EUCを削除してしまいました。
これを元にもどしたいのですが、どんな方法があるでしょうか。
すみませんが、よろしくお願いします。
FreeBSD 4.2-RELEASEです。

No. 1744 # 68user 2001/02/28 (水) 00:10:14
>>1743 なお
FreeBSD 4.2-BETA では
    % ls -ld /usr/share/locale/ja_JP.EUC
    drwxr-xr-x 2 root wheel 512 Jan 8 14:18 /usr/share/locale/ja_JP.EUC/
    % ls -l /usr/share/locale/ja_JP.EUC
    lrwxr-xr-x 1 root wheel 25 Jan 8 14:18 LC_COLLATE@ -> ../la_LN.ASCII/LC_COLLATE
    -rw-r--r-- 1 root wheel 5391 Jan 15 22:09 LC_CTYPE
    -rw-r--r-- 1 root wheel 304 Jan 8 14:18 LC_TIME
です。まぁおそらく 4.2-RELEASE と内容は同じでしょう。

というわけで、src を展開しているなら、
    # mkdir /usr/share/locale/ja_JP.EUC
    # ln -s ../la_LN.ASCII/LC_COLLATE /usr/share/locale/ja_JP.EUC/LC_COLLATE
    # mklocale /usr/src/share/mklocale/ja_JP.EUC.src > /usr/share/locale/ja_JP.EUC/LC_CTYPE
    # grep -v '^#' /usr/src/share/timedef/ja_JP.EUC.src > /usr/share/locale/ja_JP.EUC/LC_TIME
です。src がなければ
    http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/
から拾ってきてください。

うちでは
    # cd /usr/src/share/mklocale
    # make
すると、/obj/usr/src/share/mklocale/ja_JP.EUC.out が出力されますが、
この方法で locale/ja_JP.EUC だけインストールするのはどうやれば
いいんだろう?

もちろん CD-ROM があれば、mount して、
    # cd /
    # cat /cdrom/bin/bin.?? | tar zxvfp - usr/share/locale/ja_JP.EUC/\*
でも OK です。

cvsweb を見ていて気がついたのですが、current では、LC_MONETARY、
LC_NUMERIC を設定する
    http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/monetdef/
    http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/numericdef/
てなのができたようですね。

No. 1745 # なお [E-mail] 2001/02/28 (水) 00:20:12
過去ログみたら、マルチポストについての指摘が(^^;

すみません、マルチポストです。
www.linux.co.jp

FreeBSDで質問出来るような場所が見つからず
linux板に書き込んでしまいましたが、
68userさんのサイトを思い出し、投稿させて頂きました。
linux.co.jpのほうはレスしてもうらうと悪いので
解決したと書いておきましたが、実はまだです。(^^;
反省と謝罪までに、、、、でわでわ、すみません。
下記のほうよろしくお願いします。

No. 1746 # なお [E-mail] 2001/02/28 (水) 00:43:24
>1744 68userさん
ありがとうございます。
srcからうまくいきました。

locale一つでも、色々方法があるみたいですね、、
まだ知識が追いついてないですが、書いてくださった他の方法も試してみます。
でわ、解答ありがとうございました。

No. 1747 # rosegarden 2001/02/28 (水) 01:30:10
>>1744 68user
> うちでは
> # cd /usr/src/share/mklocale
> # make
> すると、/obj/usr/src/share/mklocale/ja_JP.EUC.out が出力されますが、
> この方法で locale/ja_JP.EUC だけインストールするのはどうやれば
> いいんだろう?
-current の make world の際のログがありましたけど、
単純にコピーでいいようですね。
> ===> share/mklocale
> install -c -m 644 -o root -g wheel el_GR.ISO_8859-7.out /usr/share/locale/el_GR.ISO_8859-7/LC_CTYPE
> install -c -m 644 -o root -g wheel ja_JP.EUC.out /usr/share/locale/ja_JP.EUC/LC_CTYPE
> install -c -m 644 -o root -g wheel ja_JP.SJIS.out /usr/share/locale/ja_JP.SJIS/LC_CTYPE
[snip]

/usr/obj の下のファイルが使えるなら、多少の無駄があるけど、
make installworld するのも手です。

> cvsweb を見ていて気がついたのですが、current では、LC_MONETARY、
> LC_NUMERIC を設定する
> http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/monetdef/
> http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/numericdef/
> てなのができたようですね。

これが結構間があいて commit されていたので、make world が
途中でこけるのが二三日続いたことがありました。それで覚えてます。

No. 1748 # CZ 2001/02/28 (水) 01:51:33
>>1739 68userさん

> > 「Underconstruction」なのが残念ですが。
> ってどこに書いてありました?

スレッド一覧の最下部の「Mail converted by HyperThreads v0.9.1」のリンク先です。作者のウェブサイト<http://www.etl.go.jp/~takagi/>からも参照できます。

> > 結果画面でNo.531だけが正常に表示されませんでした。
> http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=531
> のことでしたら、あれで正しい表示です。CZ さんが見られたときは
> 変な表示になってましたか?

Namazuの検索結果画面での表示のことです。「オペランド」等で検索してみるとお分かりになるはずです。

さて,いろいろと探していたら,<http://blade.nagaokaut.ac.jp/>で使われているbladeシステムがかなり気に入りました。bladeクローンの<http://www.rr.iij4u.or.jp/~hideto-i/rb/yaiba/>が開発されています。rubyは分かるのでいいのですが,これをWindowsで動かそうとしたらかなり労力が要りそうで,ちょっと躊躇しています。
# そのうちに常時接続になることだし,そろそろ家庭内サーバを立てるか。
## でも騒音と夏の空調とセキュリティの確保が大変そう。
### ひょっとして常時接続になればローカルで閲覧する意味もなくなるか?

独り言を書き連ねてしまいました。

ではでは,これからもよろしくお願いします。

No. 1749 # なお [E-mail] 2001/02/28 (水) 02:31:58
>>1725のりさん
解決したようですが、ちょっとXのリソースについて
私も今勉強中なのですが、、editresコマンドなどあるみたいです。

http://www.linux.or.jp/JF/JFdocs/XWindow-User-HOWTO-8.html
http://www.ainet.or.jp/~inoue/athena/index.html

No. 1750 # 68user 2001/02/28 (水) 04:04:28
>>1748 CZ
> 「Mail converted by HyperThreads v0.9.1」のリンク先です。
なるほど、あれは高木さんの自作でしたか。公開してほしいなぁ。

> bladeクローンの<http://www.rr.iij4u.or.jp/~hideto-i/rb/yaiba/>が開発されています。
あ、これまた嫌いなインタフェース (^^;

# これは、単に慣れてないだけという可能性もありますので、
# 本当の評価は保留中です。

> 「オペランド」等で検索してみるとお分かりになるはずです。
うーん、わからんです。どの辺でしょう。
    http://X68000.startshop.co.jp/~68user/tmp/wwwboard-531.gif
ちなみにメールアドレスが先頭に出るのは、僕の namazu 用
フィルタの書き方が悪いせいです。

あと、この BBS で <http://blade.nagaokaut.ac.jp/> という書き方をすると
          &lt;http://blade.nagaokaut.ac.jp/&gt;
    → <A HREF="&lt;http://blade.nagaokaut.ac.jp/&gt;">
と置換されていましたが、さきほど直しました。こういうバグを
見つけるたびに、自分の想像力のなさを思いしらされますね。

>>1745 なお
> www.linux.co.jp
質問者が知らないのは仕方がないし、間違った回答をしてしまうのも
仕方がないですが、その間違った答えにツッコミ入れる回答者がいない
コミュニティというのは悲惨ですね。
    http://www.linux.co.jp/bbs/bbs1/bbs.cgi?num=2721&ope=sel
    http://www.linux.co.jp/bbs/bbs3/bbs.cgi?num=855&ope=sel

No. 1751 # 68user 2001/02/28 (水) 06:56:57
おっと書き忘れ。

>>1747 rosegarden
> -current の make world の際のログがありましたけど、
> 単純にコピーでいいようですね。
なるほど。手動でやる場合は、
    ftp://current.jp.FreeBSD.org/pub/FreeBSD/snapshots/i386/log/
を見ればよかったわけですね。

No. 1752 # CZ 2001/02/28 (水) 11:29:33
>>1750 68userさん

> > bladeクローンの<http://www.rr.iij4u.or.jp/~hideto-i/rb/yaiba/>が開発されています。
> あ、これまた嫌いなインタフェース (^^;

そうですか? スレッド表示など特に秀逸だと思ったのですが。
<http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/22494?22494-23482>

> うーん、わからんです。どの辺でしょう。

| ……wwwboard.cgi?log=531">名前を「やまい」元(山井・孝雄)に変えましたー/a></strong> (スコア: 1)

Internet Explorerやw3m等から見るとソースがこんな具合になっています。で,見かけ上Aエレメントが閉じられていないために問題が起きるわけです。Lynxもそうですが,HTML解釈上は正しくDDエレメントの手前でアンカーを切っています。

原因は半角の「。」のようです。当方ではNetscape Navigator(4.7/2.0)だけが文字化けせずにAエレメントが閉じられていました。十分に検証せずに一方的に報告してしまったことをお詫びします。最初からNetscape Navigatorで確かめておけば原因もすぐに判明したと思います。

> あと、この BBS で <http://blade.nagaokaut.ac.jp/> という書き方をすると
> &lt;http://blade.nagaokaut.ac.jp/&gt;
> → <A HREF="&lt;http://blade.nagaokaut.ac.jp/&gt;">
> と置換されていましたが、さきほど直しました。こういうバグを
> 見つけるたびに、自分の想像力のなさを思いしらされますね。

私の自作BBSでも同じ問題が発生していることを以前から認識していました。68userさんの掲示板ソースも参考にした覚えがあるので,ひょっとするとURL置換処理をコピーしていたのかも知れません。そのうち暇があれば直しておきます。

# 睡眠は大事です。かくいう私も最近……。

No. 1753 # 金床 [E-mail] 2001/02/28 (水) 14:36:42
お邪魔致します。このサイトの情報はPerlでのネットワークプログラム作成時に
大変参考にさせて頂いております。以前も一度この掲示板にてお世話になりました。

本日はFTPとHTTPの比較について質問がありやって来ました。

昨日書店で立ち読みした、発売したばかりの
ASCII NETWORK MAGAZINE4月号
http://biz.ascii24.com/biz/n-mag/article/2001/02/23/623348-000.html
に、比較的初心者向けのFTPプロトコルの解説記事があったのですが、その冒頭に

「FTPはHTTPよりわずかに速いため、現在もよく利用される」

という(言い回しが違うかもしれません)記述がありました。これは本当でしょうか?

CやPerlでsocket関数を使いTCPのアプリケーション層のプログラムを作っている
と、プロトコルがFTPであるのかHTTPであるのか(もしくはSMTPやPOP3なのか)は
データを受信(または送信)するアプリケーションが判断することで、ネットワーク上
では区別されないように思えました。

ポート番号で区別できるという考えもありますが、もちろんWell-Knownポート以
外を使ったHTTPやFTPでの通信も可能ですよね。

IPパケットレベルでHTTPとFTPのパケットが区別され、FTPの方がわずかに速く通
信が可能という事はあるのでしょうか?いきなりで申し訳ありませんが、お答え頂ければ
幸いです。

No. 1754 # 68user 2001/02/28 (水) 15:37:35
>>1752 CZ
> そうですか? スレッド表示など特に秀逸だと思ったのですが。
あ、アイコンがわかりにくいので拒否反応を示しただけですから、
聞き流してくださいまし。

> Internet Explorerやw3m等から見るとソースがこんな具合に
> なっています。
IE5.5 で確認しました。原因究明はウチに帰って元データを
見てからにします。

>>1753 金床
> FTPはHTTPよりわずかに速いため
FTP はコントロールコネクションとデータコネクションがありますが、
HTTP はコネクションは1本しか張らないので、FTP の方がわずかに
速い *かも* しれません。でも、誤差の範囲内だと思います。

なので、(この部分を見る限りでは) 不適切な解説だと僕は思います。

> IPパケットレベルでHTTPとFTPのパケットが区別され、FTPの方が
> わずかに速く通信が可能という事はあるのでしょうか?
アプリケーションゲートウェイ (delegate とか) で帯域制限でも
しない限り ありえないです。金床さんが書かれている考え方は
正しいです。

No. 1755 # 金床 [E-mail] 2001/02/28 (水) 16:04:36
お答え頂きありがとうございます。

>FTP はコントロールコネクションとデータコネクションがありますが、
>HTTP はコネクションは1本しか張らないので、FTP の方がわずかに
>速い *かも* しれません。でも、誤差の範囲内だと思います。

これは、FTPのデータコネクションでは目的のデータ(ファイルやファイルリストなど)しかネットワーク上を
転送されないのに対し、HTTPでは最初にHTTPリクエストがネットワーク上を通るので、その分という事でしょうか。

それとも、データコネクションでのデータ受信(送信)中も、コントロールコネクションが何らかの役割を果たして
いるという意味でしょうか。つまり、転送されるデータが巨大になればなるほどFTPとHTTPで差がでてくるような
現象が存在するのでしょうか?

最初に書くべきでしたが、私がここで対象にしている「FTPとHTTPの転送速度の差」は、
数Kb〜数百Kb程度の小さなファイルでのやりとりではなく、巨大なデータ(少なくとも10Mb程度)
で現れる(かもしれない)差の事です。

>アプリケーションゲートウェイ (delegate とか) で帯域制限でも
>しない限り ありえないです。
なるほど、やはりそうですよね。少し安心しました。

No. 1756 # すな 2001/02/28 (水) 16:11:15
# おぉすごい書き込み…うちとは大違い(笑)

68user>お使いの OS は何でしょうか?
はい、初心者入門用?(笑)VineLinux1.1CRです。
ちなみに5秒sleepした結果以下のようなログが生成されています。
2001-02-28 00:59:06 12:59am up 13:13, 1 user, load average: 0.00, 0.00, 0.00
2001-02-28 01:00:02 1:00am up 13:14, 1 user, load average: 0.00, 0.00, 0.00
2001-02-28 01:01:03 1:01am up 13:15, 1 user, load average: 0.00, 0.00, 0.00
2001-02-28 01:02:06 1:02am up 13:16, 1 user, load average: 0.00, 0.00, 0.00
〜略〜
2001-02-28 03:57:05 3:57am up 16:11, 1 user, load average: 0.00, 0.00, 0.00
2001-02-28 03:58:06 3:58am up 16:12, 1 user, load average: 0.00, 0.00, 0.00
2001-02-28 03:59:06 3:59am up 16:13, 1 user, load average: 0.00, 0.00, 0.00
2001-02-28 04:00:05 4:00am up 16:14, 1 user, load average: 0.00, 0.00, 0.00
2001-02-28 04:01:06 4:01am up 16:15, 1 user, load average: 0.00, 0.00, 0.00
2001-02-28 04:02:06 4:02am up 16:16, 1 user, load average: 0.08, 0.02, 0.01
2001-02-28 04:03:06 4:03am up 16:17, 1 user, load average: 0.72, 0.21, 0.07
2001-02-28 04:04:07 4:04am up 16:18, 1 user, load average: 1.08, 0.40, 0.14
2001-02-28 04:05:07 4:05am up 16:19, 1 user, load average: 1.21, 0.56, 0.21
2001-02-28 04:06:05 4:06am up 16:20, 1 user, load average: 0.60, 0.50, 0.21
2001-02-28 04:07:05 4:07am up 16:21, 1 user, load average: 0.22, 0.41, 0.19
2001-02-28 04:08:06 4:08am up 16:22, 1 user, load average: 0.08, 0.33, 0.18
このマシンは試験用のマシンで、ペンティアム166です。
ちなみに、マシンフル稼働状態だとloadの数値は最大いくつ位になるのでしょう?


金床>FTPはHTTPよりわずかに速いため、
これ、自分も以前も気になっていましたが、回線トラフィックの方が
影響が大きそうなのと、特に支障がなさそう(知らなくても)なので、
ほったらかしの疑問にしていました(^^;
httpと違ってftpはデーターコネクションとコントロールコネクションが
独立している為に僅かに早いのかな?なんて勝手に想像しています。
# 無駄な反応してすいません。

No. 1757 # すな 2001/02/28 (水) 16:12:18
あら?いろいろと書いているうちに、前後してしまった…(^^;

No. 1758 # すな 2001/02/28 (水) 16:23:50
金床>
私も詳細は判りません(手抜き)ですが、調べるなら参考まで。
日本語RFC(FTP)
http://hp.vector.co.jp/authors/VA002682/rfc959j.htm

No. 1759 # 68user 2001/02/28 (水) 16:24:40
>>1755 金床
ああ、逆でした。

FTP はコネクションを 2本張るので、3way handshake が2回行われ、
その分 HTTP の方がわずかに速い *かも* しれません。

あと、FTP だと USER/PASS/TYPE/PORT などのコマンドを発行した
後はレスポンスを待たなければいけませんが、HTTP だと最初に
リクエストを送って、あとは受け取るだけなので、そういう点でも
HTTP の方が速い *かも* しれません。

それらの差が *仮に* あったとして、なおかつ数十 KB 程度の
小さいデータの転送時には *仮に* 体感できたとしても、
> 巨大なデータ(少なくとも10Mb程度)で現れる(かも
> しれない)差の事です。
データの転送自体の仕組みは全く変わらないため、転送データの
サイズが大きくなればなるほど、差は目立たなくなるでしょう。

No. 1760 # 金床 [E-mail] 2001/02/28 (水) 16:55:18
>データの転送自体の仕組みは全く変わらないため、転送データの
>サイズが大きくなればなるほど、差は目立たなくなるでしょう。
納得行く答えを頂きました。ありがとうございます。

>すなさん
RFC情報、どうもありがとうございます。

No. 1761 # 68user 2001/02/28 (水) 16:55:20
>>1756 すな
> 2001-02-28 01:00:02
5秒 sleep したのですから、00:59:57 あたりに cron から
起動されているわけですか。手元の FreeBSD 4.1-RELEASE と
Solaris2.6 で負荷をかけて試してみましたが、1秒程度遅く
なることはあっても、早く起動されることは一度もありません
でした。

となると、Vine の cron が腐ってるということになりませんかね。

> マシンフル稼働状態だとloadの数値は最大いくつ位になるのでしょう?
とりあえず
    http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1119
を読んでください。理論的には、load average はどこまででも
増やすことができます。

No. 1762 # すな 2001/02/28 (水) 17:40:32
68user>となると、Vine の cron が腐ってるということになりませんかね。
なるほど、と言う事はcronの実装も結構ディストリビューションで違うのですね。
というか、さすがSolarisと言うべきなのか…
# マシンの内臓タイマーの精度とかも関係有るのかな?
# このマシンはかなり時間が狂うので…(1日数秒はあたりまえ)

>http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1119
なるほど、これも大変勉強になりました。
最初は単純にシステム負荷を100で割った(理由不明)数値なのかと思っていました。

Windows等のシステム負荷表示とはまったく違って、100%以上の負荷まで表示
している訳ですね。(待ちプロセスを負荷と言うかは別として)
説明も大変判りやすかったです。

No. 1763 # CZ 2001/02/28 (水) 22:59:34
>>1750 68userさん

> あと、この BBS で <http://blade.nagaokaut.ac.jp/> という書き方をすると
> &lt;http://blade.nagaokaut.ac.jp/&gt;
> → <A HREF="&lt;http://blade.nagaokaut.ac.jp/&gt;">
> と置換されていましたが、さきほど直しました。

自作BBSを見ると正規表現部分*だけ*はほぼ同じでした。やはりここの掲示板のソースを引き写していたようです。(perlではなくrubyですが。)で,直していて気が付いたことですが,

s!<A HREF="(.*?)&gt;">(.*?)&lt;</A>!<A HREF="$1">$2</A>&lt;!g;

も加えておいた方がよいのでは。

No. 1764 # CZ 2001/02/28 (水) 23:02:34
<<1763
ん? 訂正。

s!<A HREF="(.*?)&gt;">(.*?)&gt;</A>!<A HREF="$1">&gt;$2</A>&gt;!g;
s!<A HREF="(.*?)&lt;">(.*?)&lt;</A>!<A HREF="$1">&lt;$2</A>&lt;!g;

こうですね。

No. 1765 # CZ 2001/02/28 (水) 23:05:27
<<1764

ん?? 何やってるんだろう。

s!<A HREF="(.*?)&gt;">(.*?)&gt;</A>!<A HREF="$1">$2</A>&gt;!g;
s!<A HREF="(.*?)&lt;">(.*?)&lt;</A>!<A HREF="$1">$2</A>&lt;!g;

これでいいんですね。
<<1762 はタイプミス
<<1763 は勘違いでした。

板汚しですみません。

No. 1766 # mm 2001/02/28 (水) 23:29:52
あっ、ウチも同じバグがある(^^;
でも、書き戻しですね…、ちょっとテストさせてくださいm(_o_)m
<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>

No. 1767 # 68user 2001/03/01 (木) 01:02:25
おー、これってきっちりやると結構面倒かも。で、30分あれこれ
やった結果…これでどだ!
    $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga';
    
    s/&/&amp;/g;
    s/\"/&quot;/g;
    s/</&lt;/g;
    s/>/&gt;/g;
    $http_pattern = '((http|https)://[a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+)';
    $out = '';
    while (1){
            if ( ! s!(.*?)($http_pattern)!! ){
                    $out .= $_;
                    last;
            }
            $out .= $1;
            $buf = $2;
            $buf =~ s/((&lt;|&gt;|&quot;).*)//;
            $rest = $1;
            $buf =~ s!$http_pattern!<A HREF="$1">$1</A>!;
            $out .= $buf;
            $_ = $rest . $_;
    }
    
    print "$out\n";
無限ループが恐いので (^^;、まだ wwwboard.cgi には組み込んでません。

No. 1768 # mm 2001/03/01 (木) 02:34:18
無茶苦茶効率悪そうだし、未定義変数使用の警告が出るけど…(^^;

    $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga';
    $http_pattern = '(http|https)(://)(([a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+?)(&gt;|&lt;|&quot;)|([a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+))';
    s/&/&amp;/g;
    s/\"/&quot;/g;
    s/</&lt;/g;
    s/>/&gt;/g;
    s!$http_pattern!<A HREF="$1$2$4$6">$1$2$4$6</A>$5!g;

No. 1769 # CZ 2001/03/01 (木) 07:43:42
>>1767 68userさん
おはようございます。

> おー、これってきっちりやると結構面倒かも。

こんなに奥が深いものとは想像もつきませんでした。以前これに着手しかけて断念した覚えはあったのですが,なぜ断念したかは覚えていません。

> 無限ループが恐いので (^^;、まだ wwwboard.cgi には組み込んでません。

早速ruby文に変換して実働掲示板に使っています。無限ループになっても利用者が二人しかいないサーバだし,HTTPならすぐ切れそうだということで,心配はしていません。

そんなわけで,いつもありがとうございます。これからもお世話になります。

No. 1770 # 68user 2001/03/01 (木) 12:11:10
こんなのも。
    $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga';
    $http_pattern = '((http|https)://[a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+)';
    s/&/&amp;/g;
    s/\"/&quot;/g;
    s/</&lt;/g;
    s/>/&gt;/g;
    @items = split(/(&lt;|&gt;|&quot;)/, $_);
    foreach (@items){
            s|$http_pattern|<A HREF="$1">$1</A>|g;
    }
    $_ = join('', @items);
    print "$_\n";
アルゴリズム・正規表現が複雑にならないという点で、これが
一番よさげかなぁ。でも動作チェックと速度計測をしなくては。

もっとよいのを思いついた方は教えてください。

No. 1771 # 68user 2001/03/01 (木) 23:48:26
>>1770 68user
commit しました。とか言ってみたり。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi

No. 1772 # mm 2001/03/02 (金) 00:14:33
>>1770 68userさん
いいですねぇ。
これ頂きます。perl4でも動くし(^^;

No. 1773 # purine 2001/03/02 (金) 11:42:08
質問したいことがあります。それはあるプログラムでPIDを変数として
持っているときに、その変数のPIDのプロセスを殺す方法があれば教えて欲しいのですが。
よろしくお願いします

No. 1774 # 68user 2001/03/02 (金) 12:35:01
>>1773 purine
必ず OS 名や使用している言語を書いてください。

kill コマンドか、システムコール kill を使います。
    http://X68000.startshop.co.jp/~68user/unix/pickup?keyword=kill&target=command&partial=on

No. 1775 # 68user 2001/03/03 (土) 20:09:31
japu さん (http://www.japu.org/) より、source.cgi に関して
CGI Security Advisoriy をいただきました。

これは他サイトに HTTP でアクセスし、GET した結果を表示
するもので、
    「CGI の小部屋」http://X68000.startshop.co.jp/~68user/Cgi-room/
からは <!-- --> でコメントアウトしてあったものです
(なぜコメントアウトしたかは忘れた)。

# また、昔利用していた http proxy 経由でアクセスするため、
# X68000.startshop.co.jp からは正しく動作しませんでした。

しかし、トップページからはスクリプトのソースを見ることができ、
source.cgi 自体も実行可能なままになっていました。これに対して
    http://X68000.startshop.co.jp/~68user/Cgi-room/source.cgi?url=http://www.yahoo.co.jp';ls%20*'
といったアタックが可能でした。これは
    open(IN,"$httptalker -get '$url'|");
の部分で
    open(IN,"$httptalker -get 'http://www.yahoo.co.jp';ls *''|");
と解釈されます。open の引数に ; ? * | などを渡すと、perl は
/bin/sh を起動し、/bin/sh がコマンドを実行しますので、任意の
コマンドが実行可能です。

で、SA を受けて
    open(IN, "-|") or exec($httptalker, '-get', $url);
と修正しました。この場合は perl が直接 fopen(3) を呼ぶため、' ; * など
が特別扱いされることなく、$httptalker の引数にそのまま渡ります。

source.cgi の更新履歴:
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/Cgi-room/source.cgi


セキュリティホールを指摘して下さった japu さんに感謝いたします。

んで、
    「CGI の小部屋」http://X68000.startshop.co.jp/~68user/Cgi-room/
ですが、もうメンテする気力がないし、技術的な興味もないし (nslookup とか
whois コマンド呼ぶだけのスクリプト見てもおもしろくないでしょ)、例えば
ドメイン名検索とかならもっと便利なサイトがあるので、この掲示板で誰からも
反応がなければ近日中に消すつもりです。

No. 1776 # 68user 2001/03/03 (土) 20:48:21
>>1775 68user
>  open(IN, "-|") or exec($httptalker, '-get', $url);
> と修正しました。この場合は perl が直接 fopen(3) を呼ぶため
訂正。perl が直接 pipe(2)、fork(2)、exec(2) するため、でした。

No. 1777 # Netboy [E-mail] 2001/03/03 (土) 21:02:28
CGIの小部屋は消さないで欲しいです.
メンテ終了ページは倉庫ディレクトリなどに
移設するのみにしていただけると嬉しいです.

簡単な内容のものでも,知らない人に説明するとき
サンプル的に便利に利用させていただいております.

No. 1778 # 68user 2001/03/03 (土) 21:36:08
>>1777 Netboy
> CGIの小部屋は消さないで欲しいです.
了解いたしました。と決まれば、見られても恥ずかしくない
程度に brush up せねば。

No. 1779 # ふくし [E-mail] 2001/03/04 (日) 01:16:31
いつも質問ばかりですいませんのふくしです。
Perl で use strict 'vars'; とすると、変数を使うときは
パッケージを明示するか、my 宣言しないと怒られますが、
$a、$b という変数は怒られないで、%main:: シンボルテーブルに
追加されますね。$aa だとダメ。$c もダメ。なぜでしょう?
恐れ入りますがご存知の方はご教示ください。

No. 1780 # 68user 2001/03/04 (日) 01:24:36
>>1779 ふくし
想像でモノを言いますが、sort でセットされるのが $a と
$b だから特別扱いされているんじゃないでしょうか。
# Ex. sort { $a cmp $b }

No. 1781 # ふくし 2001/03/04 (日) 02:22:08
ああ〜そかそかそかそか。使いますねえ sort で $a と $b。
すっきりしました。いつもありがとうございます!(^^)

No. 1782 # Tel 2001/03/05 (月) 16:05:53
はじめまして。Telと申します。
以前、こちらで共有メモリについて少し触れられていたようなので、質問をしてみようと思いました。

現在、共有メモリ上にフラグの役割をもつ変数を用意し、複数のプロセス間でそのフラグを参照し、フラグの状態によって処理の分岐をするというプログラムを書いています。
そこでわからない点が出てきました。

共有メモリに変数を用意する方法の記述についてはサンプル等を見て作成することができると考えています。
しかし、それを参照する各プロセス側での記述方法について、サンプルが少なくよくわからないのです。
たとえば
int flag;
char data[datalength];
という2つの変数が共有メモリにある場合、flagの内容によってdataに書き込む内容を分けるという処理は具体的には、どう記述すれば良いのでしょうか。

プログラムAは
flag==1 ならば"good morning."
flag==2 ならば"good afternoon."
flag==3 ならば"good evening."
をdataに書き込む。
プログラムBは
flag==1 ならば"beakfast."
flag==2 ならば"lunch."
flag==3 ならば"dinner."
をdataに書き込む。
上記のような場合、AとBそれぞれではどう宣言してからflagやdataを使うのでしょうか。

勉強不足からくる質問だと思いますがUNIXの知識がない為なのか、書籍の選びかたが悪い為なのか、難しくて具体的な記述方法がわからないためにこちらにきてみました。
どうかご指導願います。よろしくおねがいします。

No. 1783 # ゆう 2001/03/05 (月) 19:14:45
UNIXでパーミッションを変更しようとしたのですが
以下のメッセージで変更できません。どうしてですか?
502 SITE command not implemented.

No. 1784 # rosegarden 2001/03/05 (月) 19:26:37
>>1783 ゆう
> 以下のメッセージで変更できません。どうしてですか?
> 502 SITE command not implemented.
サーバ側でサポートしていないからでしょう。
SITE コマンドと言うのは標準的でないコマンドのことです。
だから、理屈の上では
ftp>SITE SHUTDOWN NOW
なんて出来ても別に不思議ではないと思います。

それでは身も蓋もないので、ためしに、
ftp>SITE CHMOD 600
とか win98 の ftp.exe だと
ftp>literal SITE CHMOD 600
(だったかな?) とかしてみて駄目だったら、駄目なんだと思います。

どっちにしても、管理者に聞いてみないと、はっきりしたことは
分からないと思います。

No. 1785 # rosegarden 2001/03/05 (月) 19:40:28
>>1782 Tel
書き込み拝見しましたが、どうも共有メモリ云々でつまずいて
おられるのではなく、単純に C 言語で目的を
達成するプログラムを書く方法について悩まれているように思えます。

# もしも違いましたら、ごめんなさい。
# 何をどうされたいのかが、不明で推測で書いていますので、
# 御理解ください。

shared memory を使ったプログラミングは経験が無いんですが、
ちょっと本を見たら、初期化やセットアップは別として
メモリへのアクセスは普通に配列や malloc したバッファへの
アクセスと変わらないようでした。

失礼を承知で書きますが、共有メモリを使わないで、固定したファイルに
flag と data を書き込んで、プログラム A と プログラム B で
やりとりをするようなものは、お書きになられますか?
もしそれが可能なら、似たような手順で出来そうです。

# もしも、既にそんなことは可能であると言うのでしたら、
# 失礼お許しください。

ちなみに、私の場合には
「UNIX ネットワークプログラミング」という本を参考にしました。
トッパンからでている本です。ちょっと眺めた程度だと、
共有メモリの部分は結構丁寧に書いてあって、
サーバとクライアントのサンプルもありました。
ざっと見たかんじでは、分かりにくいと言う感じは無かったですね。

# これって、ここで紹介されている本の旧版なのでしょうか?
# 今は二分冊になっているのですね。私のには IPv6 のことは
# 書いてないです。

No. 1786 # rosegarden 2001/03/05 (月) 20:04:25
ちょっと、すごい初歩的な質問なのですが、
一般に top コマンドの出力でメモリの状況が出力されますよね。

last pid: 20294; load averages: 0.19, 0.11, 0.04 up 1+08:42:31 19:52:21
30 processes: 1 running, 29 sleeping
CPU states: % user, % nice, % system, % interrupt, % idle
Mem: 35M Active, 6528K Inact, 12M Wired, 3448K Cache, 14M Buf, 3228K Free
Swap: 128M Total, 6588K Used, 121M Free, 5% Inuse

上のような奴です。Mem のところの Active, Inact, Wired, Chache, Buf, Free
の合計ってだいたい搭載された物理メモリの量に近いものだと思っていたのですが、
これはあたっていますか? (ただし、10% 程度の増減は許容するものとします。)

実は、3 月 1 日前後に CVSup した current なのですが、
top の表示が次のようになっています。

last pid: 7969; load averages: 0.94, 0.74, 0.40 up 0+00:11:35 19:59:58
22 processes: 2 running, 20 sleeping
CPU states: % user, % nice, % system, % interrupt, % idle
Mem: 2927K Active, 12M Inact, 6285K Wired, 2K Cache, 35M Buf, 41M Free
Swap: 256M Total, 256M Free

最初の top コマンドの表示は別マシンなのですが、上のマシンは
搭載している物理メモリは 256 MB なのに上のようになっています。
大雑把に計算しても Mem の合計値は 150MB 行っていません。
何か、私は勘違いでもしているのでしょうか?

# というか make world 中に何度も kernel panic 起こすし。
# fsck は大活躍だし。さっきは自動修復が効かずに
# /dev/ad0s2f: UNEXPECTED SOFT UPDATE INCONSISTENCY; RUN fsck MANUALLY.
# なんていうメッセージもでました。
# こういうことがしょっちゅう起こると、もう笑いしかでませんね。

No. 1787 # 68user 2001/03/06 (火) 02:16:13
>>1784 rosegarden
>> 502 SITE command not implemented.
は、SITE コマンドは未実装だよ、という FTP サーバ側の
メッセージなので、chmod は無理です。

> ftp>literal SITE CHMOD 600
ほほー、literal というのがありますか。僕が知っていたのは
quote site chmod 600 です。

あと、前にここで書いたかもしれませんが、site index ちうのが
便利です。例えば ftp://ftp3.jp.FreeBSD.org にログインして、
    ftp> site index perl-5
などなど。

>>1785 rosegarden
> 「UNIX ネットワークプログラミング」という本を参考にしました。
> トッパンからでている本です。
> # これって、ここで紹介されている本の旧版なのでしょうか?
> # 今は二分冊になっているのですね。
確か三分冊になったのですが、トッパンはなくなったので、ピアソン
エデュケーションが版権を引き継ぎました。
    http://www.mmjp.or.jp/pearsoned/washo/network/wa_net28-j.html
    http://www.mmjp.or.jp/pearsoned/washo/network/wa_net27-j.html
洋書の Vol.3 が出ているのかどうかはわかりません。
作者が亡くなったので、永遠に出ないのかもしれません。

>>1786 rosegarden
> Mem のところの Active, Inact, Wired, Chache, Buf, Free の
> 合計ってだいたい搭載された物理メモリの量に近いものだと
> 思っていたのですが
僕もそのように認識しています。current ですからちょっと
様子を見てはどうでしょう。

# VM まわりなんてとても僕の手に負えないので、役に立たない
# 返事しかできないです。ごめんなさい。

No. 1788 # ミング [E-mail] 2001/03/06 (火) 14:13:40
今日は。

本来のLOGIN パスワードを忘れてしまった場合はOSからインストールし直すしかないのでしょうか?

No. 1789 # 68user 2001/03/06 (火) 15:40:07
>>1788 ミング
> 本来のLOGIN パスワードを忘れてしまった場合はOSから
> インストールし直すしかないのでしょうか?
root でログインして、passwd コマンドで該当ユーザの
パスワードを再設定します。root のパスワードも忘れて
しまったのなら、
    http://www.jp.FreeBSD.ORG/QandA/HTML/464.html
    http://www.jp.FreeBSD.ORG/QandA/HTML/1638.html
的なことをしますが、あなたの使っている OS が何なのか
全くわからないので、これ以上はなんとも。もし Windows
なら僕にはわかりません。

No. 1790 # rosegarden 2001/03/06 (火) 16:02:59
>>1787 68user
> > ftp>literal SITE CHMOD 600
> ほほー、literal というのがありますか。僕が知っていたのは
> quote site chmod 600 です。
良く分からないのですが、使ってみた感じだと telnet コマンドを
ftp クライアント代わりに使うような場合に打ち込むコマンド類が
これで打てるようになるみたいですね。
> あと、前にここで書いたかもしれませんが、site index ちうのが
> 便利です。例えば ftp://ftp3.jp.FreeBSD.org にログインして、
> ftp> site index perl-5
> などなど。
ああ、これ便利ですね。ls-lR でも検索しているのでしょうか?
> > # 今は二分冊になっているのですね。
> 確か三分冊になったのですが、トッパンはなくなったので、ピアソン
> エデュケーションが版権を引き継ぎました。
まさか三分冊というのまでは知りませんでした。
色々ありがとうございます。
> > Mem のところの Active, Inact, Wired, Chache, Buf, Free の
> > 合計ってだいたい搭載された物理メモリの量に近いものだと
> > 思っていたのですが
> 僕もそのように認識しています。current ですからちょっと
> 様子を見てはどうでしょう。
結局、アドバイス頂いてから、ソースを色々調べて見たら、
kernel ではなくて top コマンドの表示に問題があることが分かりました。
ページ数で取得したメモリの量を KB 単位に変換してないので
変な結果になるようです。
ちょっとまだ断定的なことは言えないのですが、
とりあえず、バグリポートしておきました。

No. 1791 # ミング [E-mail] 2001/03/06 (火) 17:13:04
68Userさん
回答ありがとうございます。
OSはSolaris7です。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
root でログインして、passwd コマンドで該当ユーザの
パスワードを再設定します。root のパスワードも忘れて
しまったのなら、
        http://www.jp.FreeBSD.ORG/QandA/HTML/464.html
        http://www.jp.FreeBSD.ORG/QandA/HTML/1638.html
的なことをしますが、あなたの使っている OS が何なのか
全くわからないので、これ以上はなんとも。もし Windows
なら僕にはわかりません。

本来のLOGIN パスワードを忘れてしまった場合はOSからインストールし直すしかないのでしょうか?

No. 1792 # rosegarden 2001/03/06 (火) 17:44:55
>>1791 ミング
>OSはSolaris7です。
Solaris 7 なら
シングルユーザモードで起動してから、/etc/shadow を
編集して OK です。
インストール CD からでも出来ますが、
シングルユーザモードでの起動の方が簡単ですね。
忘れたけど、恐らく、そのままでファイルの書き換えが
出来たと思います。
FreeBSD だと mount -u / しないと書き込めませんが。

#vi は使えますよね?

No. 1793 # rosegarden 2001/03/06 (火) 17:50:59
>>1792 rosegarden
あ、
Solaris はシングルユーザモードで起動する時でも
パスワードを聞いて来ることを思い出しました。
やっぱりインストール CD から起動して、ファイルシステムを
マウントして書き換えるより無いですね。

No. 1794 # ミング [E-mail] 2001/03/07 (水) 12:29:32
>あ、
>Solaris はシングルユーザモードで起動する時でも
>パスワードを聞いて来ることを思い出しました。
>やっぱりインストール CD から起動して、ファイルシステムを
>マウントして書き換えるより無いですね

ありがとうございます。
ところでもう一つ質問があります。
directoryでls −alすると6行目に各ファイルやdirectoryの容量が表示されますが、そこによく512という数字が出てきます。そのdirectory下のファイルの容量が512以上なので512は容量ではないのかなと思ったのですが、なにか特別な意味があるのでしょうか?

よろしくお願いします。

No. 1795 # rosegarden 2001/03/07 (水) 14:43:43
>>1794 ミング
> そのdirectory下のファイルの容量が512以上な
> ので512は容量ではないのかなと思ったのですが、
ディレクトリもファイルですから、ディレクトリ自体のサイズです。
ディレクトリに書いてあるのは大雑把に言って、ファイル名と
i ノード番号です。うーん、他にも書いてあるかも知れない。
要するにファイルのリストです。最初はだいたい 512 バイトで
ファイルが沢山になった場合には適当に 512 バイト単位で大きくなって
行きます。手元の FreeBSD だとエディタでディレクトリを見ることも
できて、次のような感じです。
% ls IPv6
d200006c.html daytime6.pl ipv6_1.html
d6.c ipv6.html ipv6_2.html
% cat IPv6 | hexdump -C
00000000 84 5e 00 00 0c 00 04 01 2e 00 00 00 80 26 03 00 |.^...........&..|
00000010 0c 00 04 02 2e 2e 00 00 97 27 03 00 14 00 08 09 |.........'......|
00000020 69 70 76 36 2e 68 74 6d 6c 00 1e c0 a0 27 03 00 |ipv6.html....'..|
00000030 14 00 08 0b 69 70 76 36 5f 31 2e 68 74 6d 6c 00 |....ipv6_1.html.|
00000040 a1 27 03 00 14 00 08 0b 69 70 76 36 5f 32 2e 68 |'......ipv6_2.h|&......|そのディレクトリにあるファイルの名前だけ保持できれば
いいので、ファイルの数が少なければ、512 バイトということが
ありえます。

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

No. 1796 # rosegarden 2001/03/07 (水) 14:45:38
>>1795 rosegarden
hexdump のところが表示が変になってしまいましたね。
ソースの方を見てもらえれば分かりやすいかも。

No. 1797 # rosegarden 2001/03/07 (水) 16:41:46
>>1795 rosegarden
> ディレクトリに書いてあるのは大雑把に言って、ファイル名と
> i ノード番号です。うーん、他にも書いてあるかも知れない。
ちょっと不正確なので、正しい説明をします。
FreeBSD な人は /usr/src/sys/ufs/ufs/{ufs_vnops.c,ufs_lookup.c,dir.h}
あたりを見ると分かります。
ディレクトリは可変長レコードのデータベースみたいになっていて、
*BSD の ufs の場合一つのデータは

(1) i node 番号 (4bytes)
(2) レコード自体の長さ (2bytes)
(3) ファイルのタイプ (1bytes)
(4) ファイル名の長さ (1bytes)
(5) ファイル名(ただし 4 bytes 単位で切り上げ)

となっています。これは dir.h の direct 構造体で定義されています。

struct direct {
                u_int32_t d_ino; /* inode number of entry */
                u_int16_t d_reclen; /* length of this record */
                u_int8_t d_type; /* file type, see below */
                u_int8_t d_namlen; /* length of string in d_name */
                char d_name[MAXNAMLEN + 1];/* name with length <= MAXNAMLEN */
};

さっきの例で見ると
>>1795 rosegarden
00000000 84 5e 00 00 0c 00 04 01 2e 00 00 00

というのがありますが、

84 5e 00 00 : i node 番号 0x5e84 なので 24196
0c 00 : レコードの長さ 12 バイト
04: ファイルのタイプ 04 なのでディレクトリ
01: ファイル名の長さ 1 バイト
2e 00 00 00 : 2e がファイル名 "." あとはつめもの

つまり、これは

% ls -ai IPv6
  24196 ./ 206736 d6.c 206752 ipv6_1.html
206464 ../ 206478 daytime6.pl 206753 ipv6_2.html
206500 d200006c.html 206743 ipv6.html

としたときの "." のデータです。
little endian なので例によってバイトオーダがひっくりかえります。
ファイルのタイプは /usr/src/sys/ufs/ufs/dinode.h にあって

/* File types. */
#define IFMT 0170000 /* Mask of file type. */
#define IFIFO 0010000 /* Named pipe (fifo). */
#define IFCHR 0020000 /* Character device. */
#define IFDIR 0040000 /* Directory file. */
#define IFBLK 0060000 /* Block device. */
#define IFREG 0100000 /* Regular file. */
#define IFLNK 0120000 /* Symbolic link. */
#define IFSOCK 0140000 /* UNIX domain socket. */
#define IFWHT 0160000 /* Whiteout. */

となっています。これを見るとディレクトリは 0x04 です。
桁数があわないのは、パーミッションも一緒に保持させるためで、
下四桁はパーミッション用です。ファイルのパーミッションは
ディレクトリではなく別のところに保持されています。

No. 1798 # 筋肉。 2001/03/07 (水) 17:04:27
はじめあして。
この掲示板スクリプト、すばらしいです。いつも参考にしてます。
いきなりなんですけど、
2ちゃんねるみたいにレス式にするつもりないですか。
今のままだと、レスが分散してみにくいし、
それゆえ1つの話題に(2chみたいに)何百とレスつけるのは無理だし。

とゆーことで。

No. 1799 # 通行人ですが、一言。 2001/03/07 (水) 19:05:33
2ちゃんねるみたいに
「あげ」だの「さげ」だの「逝け」だの「氏ね」だのという書き込みは
見たくないです。
2ちゃんねるの何百というレスの半数は、そういった
「意味不明の書き込み」のように思えます。
そのようなレスを数多く書き込むよりも、今までのように
要点を的確に書いて頂いた方が、情報を得る側としてはありがたいです。
ここには検索機能もありますから、自分に必要な情報は
検索して探し出せば良いことですし、それで見つからなかった場合は
質問をすれば良いと考えています。
今のままでかまわないと思うのですが、常連の皆様方はどうですか?

No. 1800 # gixs 2001/03/08 (木) 00:30:06
>>1797 rosegarden
rosegardenさんには自明のことかもしれませんが。

ls -lで見えるサイズが、各ファイル(ディレクトリもファイル)
に対応するi-node内のサイズ情報を見ているのは、
rosegardenさんの説明のとおりです。

ディスク上の割り当てが(効率の為に)ブロック単位で行われるのも
rosegardenさんの言うとおりです。

普通ファイルの場合、i-node内のサイズ情報はファイルの末尾への書き込みの
オフセットで決まります。
8192バイトseekして1バイト書き込むとサイズは8193バイトです。
seek部分がカラだとブロックは割り当てられません。
俗に穴のあるファイルと呼ばれます。

ディレクトリの場合、i-node内のサイズ情報は割り当てられたブロックサイズ
そのものです。
理由は単に、本当のサイズ(が定義できたとしても)たいして意味がないからでしょう。

No. 1801 # gixs 2001/03/08 (木) 00:34:27
白状してしまうと、スレッド表示が欲しい、と前から思ってました。

>>1799 通行人ですが、一言。
2chのような書き込みがされることと、掲示板のユーザインターフェースは
全く別だと思います。
書き込みの内容や質は、場の雰囲気で決まるだけだと思います。

No. 1802 # おうお・まこと虫 [URL] 2001/03/08 (木) 10:51:35
たけし怪獣記を、霊能力者から、もらいました。怖いよー。

No. 1803 # rosegarden 2001/03/08 (木) 14:42:31
>>1800 gixs
> 普通ファイルの場合、i-node内のサイズ情報はファイルの末尾への書き込みの
> オフセットで決まります。
> 8192バイトseekして1バイト書き込むとサイズは8193バイトです。
> seek部分がカラだとブロックは割り当てられません。
> 俗に穴のあるファイルと呼ばれます。
穴のあるファイルという言葉ははじめて伺いました。
実はかなり無知な方なので、こうやって教えて頂くと助かります。
参考になる書き込みどうもありがとうございました。

No. 1804 # 68user 2001/03/08 (木) 15:14:47
>>1803 rosegarden
> 穴のあるファイルという言葉ははじめて伺いました。
では、ついでに。

穴あきファイルの作り方。
    % perl -e 'open(OUT,">tmp");seek(OUT,1000000,0);print OUT "a"'
穴あき部分のデータは HDD には存在しません。ですから、
    % ls -s tmp
で使用ブロック数を見ると、16 となっています。

しかし、穴あき部分を read(2) すると、最初から 0x00 が
入っているかのように扱われます。ですから、
    % cp tmp tmp2
    % ls -s tmp tmp2
      16 tmp
    992 tmp2
と、ファイルをコピーしただけで一気にファイルサイズが膨らみ、
file system full になってしまう可能性がありますので、注意が必要です。

No. 1805 # 68user 2001/03/08 (木) 15:47:17
>>1798 筋肉。
>>1799 通行人ですが、一言。
>>1801 gixs
ここが 2ch 的な場になるのと、2ch 的システムを取り入れるのは、
gixs さんの言われる通り別問題でしょう。2ch 的システムは結構
使いやすいと思います。

で、これまでスレッドタイプは特に検討していなかったのですが、
    ツリー型
        http://www.so-net.ne.jp/ClubHouse/room/pc_scramble/pc_scramble.html

    非ツリー型
        http://www.wakusei.ne.jp/twn/lng/green/wwwlng.cgi
        http://cocoa.2ch.net/unix/index2.html
がありますね (とほほラウンジも 2ch も、データ構造としては
同じでしょうから、両方の形式で表示できるようにしてもいいし)。

どちらがよいですか。また、その理由があれば教えて下さい。

ちなみに、なぜ現在のようなウナギの寝床式掲示板にしたかと
いうと、管理者が楽だからです。「新しい話題だから新しいスレッドを
立てろ」だの「クソスレ立てんなゴルア」とか「1の主治医です」とか
書かなくて済むし ;-)

でも、情報が混ざって探しづらいということならば検討はしてみます。
# それを補うつもりで >>数字 形式のリンクを導入してみました。
# 将来的にはその情報からツリー形式を抽出できないかな、と。

あと、できればご自分が使いにくいと思う理由を分析していただ
けるととってもありがたいです (それが一番難しいんですけれども)。
使いやすい掲示板というのは永遠の課題ですので、今回のような
大規模な改変や、こまかなユーザインタフェースまわりまで、提案
していただけるのはありがたいことです。

しかし、最近これまでにも増して忙しくなってしまったので、
あまり期待はしないで下さいね。

No. 1806 # rosegarden 2001/03/08 (木) 16:30:21
>>1804 68user
>穴あきファイルの作り方。
> % perl -e 'open(OUT,">tmp");seek(OUT,1000000,0);print OUT "a"'
ああ、わかりました。lseek はファイルサイズを越えても
seek できるという性質を使っているんですね。
古い UNIX のシステムコールの本で見たことあるのですが、
その時には何が何だかさっぱり分かりませんでした。
man lseek しても出てますね。
>The lseek() function allows the file offset to be set beyond the end of
>the existing end-of-file of the file. If data is later written at this
>point, subsequent reads of the data in the gap return bytes of zeros (un-
>til data is actually written into the gap).
色々とありがとうございます。勉強になります。
>>1805 68user
>ちなみに、なぜ現在のようなウナギの寝床式掲示板にしたかと
>いうと、管理者が楽だからです。「新しい話題だから新しいスレッドを
>立てろ」だの「クソスレ立てんなゴルア」とか「1の主治医です」とか
>書かなくて済むし ;-)
これは確かにそうですね。スレッド式にしても書き込む方が神経を
使わないとスレッドの意味が無くなるでしょうし。
個人的にはどちらでも構わないのですが、スレッド式にしたときに
68user さんがどんなスクリプトを書かれるのかは興味のあるところです。

No. 1807 # ひろし。 2001/03/08 (木) 22:27:55
ツリー式だと、レスのレスのレスの・・・ってやってくとどんどん
右端によってって、めちゃ見にくいと思う。
とほほラウンジは、スレ見る度にいちいちマウスうごかすのがめんどう。

ということで、2chは、やはりすばらしいと思う。

No. 1808 # やまま 2001/03/09 (金) 23:28:33
>>1770 68user
http://yamama.51.net/cgi-bin/minibbs.cgi?log=395
うひひひ。

えっと、自動リンクのところを、
こんな感じにしてみた。$strは、もうURLエンコードされてるっていうことで。
&amp;以外は、はっちゃいけないんだから、、、。
$str =~ s#(s?https?://(?:[\-_.!~*'()a-z0-9;/?:\@=+\$,%\#]|&amp)+)#<a href="$1">$1</a>#ig;

No. 1809 # Yuuki [E-mail] 2001/03/10 (土) 15:25:41
Xlibでの質問です。

日本語文字列をウィンドウの左上(x:0,y:0)に表示するのを書いています。
ソースコードはこれです。
http://homepage1.nifty.com/tyuuki/tmp/Makefile
http://homepage1.nifty.com/tyuuki/tmp/drawstr.c

実行結果は(うちのtwmだと)このようになります。
http://homepage1.nifty.com/tyuuki/tmp/drawstr.jpeg

なぜか上の方に隠れてしまいます。
本当は、
http://homepage1.nifty.com/tyuuki/tmp/drawstr2.jpeg
のようになってほしいんです。

# これは、多分タイトルバー(?)の長さを求めてやればいいんでしょうけど…。
XCopyAreaで0, 0を指定してるのにこうなってしまうのは、どうしてなんでしょうか?
教えてください。

No. 1810 # 68user 2001/03/12 (月) 00:52:18
>>1807 ひろし。
> ツリー式だと、レスのレスのレスの・・・ってやってくとどんどん
> 右端によってって、めちゃ見にくいと思う。
それは同感ですね。あと、現 SEGA BBS のような、ツリーを一括して
表示するのは最悪だと思います。とにかく見にくい。

>>1808 やまま
> こんな感じにしてみた。
どうもです。参考になります。

>>1809 Yuuki
> なぜか上の方に隠れてしまいます。
XDrawString/XmbDrawString に与える原点 x,y は、文字列の左下の
座標を与えます。本当はもうちょっと複雑で、原点に 10,10 を与えた
としても、フォントの lbearing, descent の値によっては、9,10 や
10,11 にドットが描画される可能性はあります。そこらへんの情報は
XmbTextExtents で取得できます。

No. 1811 # Donchan 2001/03/12 (月) 07:18:09
このサイトのUNIXシステムコールのopendirの説明にあったサンプルコードを打ち込んでみたのですが、
ファイル名の頭2文字が欠けてしまいます。dir->d_nameに-2すればファイル名の頭を指してくれるのですが
何故なんでしょう。OSは SunOS 5.5.1です。sys/dir.hを見てもちゃんとファイル名エントリがd_nameで定義されているのに。何か障害になるものがあるのでしたらお教え下さい。

No. 1812 # 通行人 2001/03/12 (月) 11:21:13
>>1811 Donchan
SunOS上でファイル名2文字切り落としが発生するということであれば、
おそらく使用されているコンパイラに問題があるものと思われます。
以下のアナウンスが参考になるのではないでしょうか。
http://www.sun.co.jp/tech/faq/solaris2_ja/Q6.19.html

以上、通りすがりの者でした。

No. 1813 # Yuuki [E-mail] 2001/03/12 (月) 14:35:37
>>1810 68user
> XDrawString/XmbDrawString に与える原点 x,y は、文字列の左下の
> 座標を与えます。
今まで左上にだと思いこんでました…。

> そこらへんの情報はXmbTextExtents で取得できます。
これで解決しました。
http://homepage1.nifty.com/tyuuki/tmp/drawstr.c
このようになりました。

ありがとうございます。

No. 1814 # 68user 2001/03/12 (月) 22:35:33
>>1813 Yuuki
> これで解決しました。
> http://homepage1.nifty.com/tyuuki/tmp/drawstr.c
http://homepage1.nifty.com/tyuuki/tmp/drawstr2.c ですよね。
誠に勝手ながら、後から見た人のために drawstr2.c を貼っておきます。
行数短縮のため、少々コードスタイルをいじらせていただきました。
もしまずければ削除いたします。

----
#include <stdio.h>
#include <locale.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

static XFontSet load_font( Display *display, const char *font_names ){
        char **miss_str;
        int miss_cnt;
        char *def_str;
        return XCreateFontSet( display, font_names,
                                      &miss_str, &miss_cnt, &def_str );
}

static int ask_text_height( XFontSet font, const char *str ){
        XRectangle rect;
        XmbTextExtents( font, str, strlen( str ), &rect, NULL );
        return rect.height;
}

int main( int argc, char **argv ){
        Display *display;
        Window window;
        GC gc, gc_clr;
        unsigned long background, foreground;
        XFontSet font;
        Pixmap pixmap;
        const int width = 640;
        const int height = 480;
        const char *message = "こんにちは。";

        if ( setlocale( LC_CTYPE, "" ) == NULL ){
                printf( "setlocale error\n" );
                exit( 0 );
        }
        display = XOpenDisplay( NULL );
        font = load_font( display, "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*" );
        background = WhitePixel( display, 0 );
        foreground = BlackPixel( display, 0 );

        window = XCreateSimpleWindow( display, DefaultRootWindow( display ),
                                            0, 0, width, height, 0, 0, background );
        pixmap = XCreatePixmap( display, window, width, height,
                                DefaultDepth( display, 0 ) );

        gc = XCreateGC( display, window, 0, 0 );
        XSetBackground( display, gc, background );
        XSetForeground( display, gc, foreground );

        gc_clr = XCreateGC( display, window, 0, 0 );
        XSetBackground( display, gc_clr, background );
        XSetForeground( display, gc_clr, background );

        XMapRaised( display, window );
        XSelectInput( display, window, ExposureMask );
        while ( 1 ){
                XEvent event;
                XNextEvent( display, &event );
                switch ( event.type ){
                case Expose :
                        XFillRectangle( display, pixmap, gc_clr, 0, 0, width, height );
                        XmbDrawString( display, pixmap, font, gc,
                                              0, ask_text_height( font, message ),
                                              message, strlen( message ) );
                        XCopyArea( display, pixmap, window, gc, 0, 0, width, height, 0, 0 );
                        break;
                }
        }
}

No. 1815 # Yuuki [E-mail] 2001/03/13 (火) 19:02:24
>>1814 68user
> http://homepage1.nifty.com/tyuuki/tmp/drawstr2.c ですよね。
すいません。
間違えていました…。

> もしまずければ削除いたします。
全然まずくないです。

今までのファイルをまとめておきました。
http://homepage1.nifty.com/tyuuki/archive/drawstr.tar.gz

No. 1816 # taka 2001/03/13 (火) 23:30:24
FreeBSD4.2R をインストールしたのですが、サウンドの設定がよくわからずつ
まずいてしまいました。いろいろHPや書籍を調べて以下のような処理を行いま
したが、以前としてサウンドが鳴りません。設定で間違っている箇所が
あれば指摘して頂きたいです。ちなみに、サウンドカードはYamahaのYMF740です。

1. カーネルの再構築
      # cd /usr/src/sys/i386/conf/
      # cp GENERIC MY_KERNEL
      # vi MY_KERNEL
          -------------------------
          以下の内容を追加
          # For PnP/PCI sound cards
          device pcm
          -------------------------
      # config MY_KERNEL
      # cd ../../compile/MY_KERNEL
      # make depend
      # make install

2. デバイスファイルの作成
      # cd /dev
      # ./MAKEDEV snd0

以下は関係ありそうなエラーログです。
> dmesg | grep pcm
pcm0: <Yamaha DS-1 (YMF740?)> irq 9 at device 10.0 on pci0
pcm0: unable to map register space
device_probe_and_attach: pcm0 attach returned 6

> cat /dev/sndstat
cat: /dev/sndstat: Device not configured

No. 1817 # 68user 2001/03/14 (水) 00:29:16
>>1816 taka
> FreeBSD4.2R をインストールしたのですが、サウンドの設定が
> よくわからずつまずいてしまいました。
えっと、サウンド・PnP まわりはいまだに何がなにやらわかりません。
うちでは device pcm を追加し、OS ブート時に boot -cv でコンフィグ
モードにして
    > pnp 1 0 bios enable irq0 5 drq0 1 port0 0x220 port1 0x0 port2 0x388
と設定しました。

なんで IRQ が 5 なのか、なんで PnP なのに手動で設定しないと
いけないのかさっぱりわかりません。pnpinfo(8) の出力も全く理解
できないし…。

僕は、IRQ って ISA のみにしかない概念? PCI のサウンドカードって
あるの? …てな知識レベルなので、FreeBSD-users-jp などで質問された
方が早いかもしれません。

どこかにわかりやすい解説はないかなぁ。

No. 1818 # rosegarden 2001/03/14 (水) 01:32:44
>>1816 taka
私の場合次のようになっています。もっとも 4.3-BETA ですが、
要領は同じだと思います。

# For non-pnp sound cards with no bridge drivers only:
device pcm0 at isa? irq 10 drq 1 flags 0x0
#
# For PnP/PCI sound cards
device pcm

# The bridge drivers for sound cards. These can be seperately configured
# for providing services to the likes of new-midi (not in the tree yet).
# When used with 'device pcm' they also provide pcm sound services.
#
# sbc: Creative SoundBlaster ISA PnP/non-PnP
# Supports ESS and Avance ISA chips as well.
# gusc: Gravis UltraSound ISA PnP/non-PnP
# csa: Crystal Semiconductor CS461x/428x PCI

# For non-PnP cards:
device sbc0 at isa? port 0x220 irq 5 drq 1 flags 0x15
#device gusc0 at isa? port 0x220 irq 5 drq 1 flags 0x13

sbc ドライバか gusc ドライバのいずれかを有効にしてみてください。
このへんは試行錯誤がいるかもしれません。
LINT から関係する部分を copy&paste してきて
自分に関係ない部分をコメントアウトすると面倒ないです。

No. 1819 # Donchan 2001/03/14 (水) 07:49:45
>>1812 通行人
パスの先頭に/opt/SUNWspro/bin/を追加することで正常に動作しました。互換性の問題だったのね……。

No. 1820 # みみ 2001/03/14 (水) 11:56:04
いきなりの質問でごめんなさい。
こちらの掲示板にはかなり詳しい方がいらっしゃるようなので、
教えて頂きたいのです。

今、UNIX上で動くクライアントサーバをC言語で作っています。
(ほとんど経験がないので、勉強しながらという感じです。)
ちょうど、こちらに参考になるサンプルがあったので、それを元に
作っているところです。
自分の環境で、クライアントとサーバ間のソケット通信をすることが
できることを確認したところです。

ここからが良くわからないところなのですが、
クライアントが複数あって、それぞれが別の処理を行う時、
サーバ側としては、そのクライアントをどう区別したら良いのでしょうか?
selectを使って、任意のソケットに対して任意のデータを送信することは
わかるのですが、では、任意のクライアントプロセスを区別するのは
どうすれば良いのかが、いまひとつ、ぴんとこないのです。
たとえば、サーバ側の処理として、
クライアントA:サーバに「aaa」→「AAA」と変換してecho。
クライアントB:サーバに「bbb」→「BBBBB」と変換してecho。
クライアントC:サーバに「ccc」→「C」と変換してecho。
というのがあるとします。
各クライアントが順不同のタイミングで接続してきた場合、
どのクライアントがどのソケットに接続しているのかを知るのには、
どのような方法があるのでしょうか?
ついでですが、クライアントは、おなじ内容のものが複数接続してくる
場合もあります。(AとA'とA''、みたいに。)

つまり、ソケットディスクリプタのID(と言って良いのでしょうか?
よく、 sd[0]とかsd[i]とかと書かれているものです。)と
クライアントをどうリンクさせれば良いのかがわからない、んです。
C言語で処理するレベルでの話だろうとは思うのですが、
具体的なサンプルがなくて、方法を理解することもできず、困っています。
どうぞ、知恵をお貸しください。
いきなり現れて勝手なお願いをしていますが、よろしくお願いします。

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