68user's page 掲示板

Prev< No. 1617〜1637> Next  [最新発言に戻る] [過去ログ一覧]
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)をフォア〜で行っているのですがこれをバック〜に変更すると何かメリットが出るのでしょうか?!
「バック〜に変更しよう」案が出ており、上司から「何か違うの?」と聞かれ、言葉につまっております。助けて下さい。。

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