2

素朴な質問で申し訳ありませんが、.processor.rbで始まるRuby プログラムがあるとしますdata = STDIN.read。このプログラムをこのように呼び出すと

cat textfile.txt | processor.rb

全体をパイプするのをSTDIN.read待ちますか?それとも、不確定部分を変数に割り当てますか?cattextfile.txttextfile.txtdata

これを尋ねているのは、最近私のプログラムの 1 つに奇妙なバグがあり、後者が当てはまることを示唆しているからです。

4

2 に答える 2

2

read メソッドはファイル全体をそのままインポートし、出力を生成するプロセスが終了したときにのみ戻ります (パイプのフラグで示されます)。cat からの出力で、次に read を呼び出すと、0 バイトが返される場合があります。

簡単に言えば、プロセスはいつでもその出力に追加できます。これは「tail -f」などの場合です。そのため、実際にチェックせずに STDIN からすべてのデータを読み取ったことを保証することはできません。

ただし、OS によっては、cat または shell パイプの実装が若干異なる場合があります。ここでの動作についてPOSIXが何を指示するかについてはよくわかりません。

于 2009-12-30T16:08:15.667 に答える
0

おそらく行バッファリングされ、改行または EOF に遭遇するまで読み取ります。

于 2009-12-30T15:56:42.853 に答える