- シグナルについて - それっぽいメモ
-
シグナル良くわかってない。UNIXプログラミングのちゃんとした本読ま ないとだめだな...。けどそれ系の本って高くて買えない。
シグナル/プロセス・・・ @2005.09.14合わせて読む
シグナルを考慮する
Linuxへのポートの参考
- Windows→Linuxへの移行時の注意点
-
ぱっと見よくまとまってそうだけど、どうだろ。
同期系について後で読む(2008.3.26)。
select()がシグナルで中断されるというの以外は今や問題なし。
シグナル/プロセス・・・
UNIX系のプログラムプロセスとかシグナルとか簡単とか思ってたら。いろいろ落とし穴があるらしい。
一度、memologueさんのサイトは読んでおいたほうが良さそう。
一度、memologueさんのサイトは読んでおいたほうが良さそう。
名前付きパイプ(FIFO)について
- 名前付きパイプへの書き込み、読み込みをするプロセスが1つずつある。
- 読み込み側では、書き込みをselect()待っている
- 書き込み側で名前付きパイプをopenして書き込む
- 読み込み側では、書き込まれたタイミングでselect()が返ってくる
- 書き込み側で名前付きパイプを閉じる
- この時、読み込み側のselect()が常に待ちなしで帰ってきて0バイトのread()が正常に行われる。
正常な動作なんだけど、書き込み側で名前付きパイプがclose()された後もselect()で次にopen()、write()されるのを待ちたい場合に不都合・・・。
解決策は、書き込み側で名前付きパイプがclose()されたら、読み込み側でEOFがread()されるので、読み込み側でも一旦名前付きパイプをclose()、再度open()して、書き込み側が次のopen()、write()されるのを待つ。
BSDでは、poll()を使えば一旦close()しなくても良さそう・・・
struct pollfd poll; poll.events = POLLIN|POLLINIGNEOF; if (poll(poll_list , 1, -1) < 0) { exit(1); }->NAB - Re: kern/76525: select() hangs on EOF from named pipe (FIFO)
| HOME |