Re: [Q] パイプで通信
fj.unixの記事<3988844news.pl@insigna.ie.u-ryukyu.ac.jp>で
kono@ie.u-ryukyu.ac.jpさんは書きました。
> > # というか、select()をご存じなのになぜこれが出てこ
> > # ないのか不思議。select()を使ってはいけない理由が
> > # 何かあるのでしょうか...。
>
> ちゃんと使うのは難しいですよ。
むむ、そうかな。
> > 可)、write()は返り値を調べて何バイト書けたかをきち
> > んとチェックする、などの配慮が必要です。
>
> BSD ならwriteは失敗しないのでその必要はありません。Linux
> では必要です。
4096バイトしか容量のないパイプにそれより大きいデー
タを書こうとしたときは、BSDでも書けたところまでの
バイト数が返ると思ったのですが、違うかな。
> さらにalarm/itimer と select を組み合わせると、read/write/select
> が、それにひっかかると失敗するので、それに対応するコードを
> 書く必要があります。これは結構大変です。あはは。
シグナルがからむとね。pselect()があるならselect()
でなくてそっちを使うという手もありますが。
でもalarm()/itimer()とselect()を組み合わせるってど
んなときだろう。デーモンプロセスで下位のクライアン
ト管理はselect()で行って、上位のスケジューリングに
alarm()/itimer()を使うのかな?
select()を使いたいときって外部のイベントと協調して
動きたいわけなので、内部の都合(タイマーとか)で縛ら
れなくてすむように設計しませんか?
--
太田純(Junn Ohta) (株)リコー/新横浜事業所
ohta@sdg.mdd.ricoh.co.jp
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735