1

Pipe.SourceChannelを介してByteBuffer内の別のプログラムBのstdoutを受信するプログラムAがあります。

プログラムは、ストリームの終わりに達するまで(つまり、ByteBufferのread()が-1を返すまで)、stdoutのByteBufferから読み取ります。

プログラムBのstdoutは、プログラムの実行中に複数回開閉できますか?つまり、read()が-1を返す可能性はありますが、後でプログラムBに追加のstdoutがあります。その場合、プログラムAはByteBufferの別のread()を実行する必要がありますか?

前もって感謝します。

4

2 に答える 2

3

Linuxでは、stdin、stdout、およびstderrにNIOを使用できます。これらは、ファイルとしてアクセスできる特定の文字デバイスに関連付けられているためです。これを行うには、、またはをそれぞれ開くことが/proc/self/fd/0でき1ます2。これは、すべてのストリームタイプ、または非Unixシステムで機能するわけではありませんが、オプションである可能性があります。

ストリームが閉じられると、それがファイルであり、ファイル名を取得できなかった場合を除いて、ストリームを再度開くことはできません。

于 2012-08-18T07:53:23.783 に答える
0

いいえ、できません。stdout、stderr、およびstdinはすべて「特別な」ストリームです。それらを閉じて後で再度開くことはできません。

于 2012-08-18T00:06:29.793 に答える