[Q] パイプで通信
nojimaです。
いろいろ調べたのですがどうしても別らないので御聞きします。
ヒントだけで結構ですので、情報お持ちの方は教えて頂けると嬉しいです。
なお、質問中のプロセスAのような機能を実際に実装しているUNIX用の
プログラムがあれば、そのプログラムの名前を教えていただけるだけでも結構です。
[Q] UNIXで動作するプロセスA/Bを用意します。
ここで、プロセスBは標準入力(stdin)からデータを吸い込んで標準出力(stdout)
にはきだす機能があります。ただ、プロセスBについては、
・標準入力(stdin)からデータを吸い込んで内部で加工し、加工したデータを
標準出力(stdout)に出力するということ以外全くわからない
ものとします。つまり、プロセスBは、
・どれだけ読みこんだら出力に出力するのか、また、
・どれだけ出力したら読込みに転じるのか、
が全く不明なものとします。
この時、名前無しpipeを2本作り、片方のpipeを使ってプロセスAから
プロセスBへデータを出力し、同時にもう片方のpipeを使ってプロセスAが
再度受け取るというものを作ろうとしたと仮定します。
+-->B-->+
| |
+---A---+
この場合にプロセスAはどうすれば、
・ プロセスBにできるだけ滞ることなくデータを出力でき、
・ プロセスBからできるだけ滞ることなくデータを得ることが出来
ますでしょうか?どのような機構がプロセスAには必要なのでしょうか?
#O_NONBLOCKとかはpipeだと何でかわからないのですが効いてくれないし、
#read/writeのブロックについてはselect/alarm等のtime outで復活させる位
#しか思い付けない...
#ashとかは既に読んでいるのですが、該当する機構が見付からないのです
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