行をリダイレクトする方法とは対照的にバッファされたデータをブロックするために、ファイルからプログラムにデータをバッファリング

StackOverflow https://stackoverflow.com/questions/4230595

質問

私はSystem.inに渡される行バッファされたデータを必要とするUNIX環境でJavaプログラムを持っています。

端末からのキーボード入力を渡すには、私のような方法でファイルから入力をリダイレクトしようとするがあれば、大丈夫です

java the_program < input.txt

プログラムが正しく実行されません。

はラインバッファリングされたデータは、標準入力経由でプログラムに渡されるブロックとは反対に、バッファ私がしていることができてどのような方法?

私が試してみました。

stdbuf -oL cat input.txt | java the_program

stdbuf -i0 java the_program < input.txt

など

grep --line-buffered . input.txt | java the_program

が、運がなかった。

任意のアイデアや提案?

役に立ちましたか?

解決

問題のほとんどは、Javaプログラムである - なぜ/どのようにラインをバッファリングするための入力を必要としませんか?ちょうど時間で行を読み取るようにCのfgets()のアナログを使用するように設計されなければなりません。そのような類縁体が存在しない場合は、多分あなたは、そのサービスを提供して機能/クラス、あなたが提供しているものは何でも単位で読むことができるものは何でも撮影、及びライン境界のいずれかの分割またはCONCATENATEを記述する必要があります。

あなたは、このようなことにはデータ(fstat()メンバーを見ている)が存在しない場合にのみ、パイプへの書き込み、パイプファイルディスクリプタにst_sizeシステムコールを使用するなど、移植不可能操作にふけるする必要があり、それに失敗。そうではないかもしれ移植不可能な手段を - しかし、それが動作することを保証するものではありません。もちろん、あなたのプログラムが一度にラインを書き込み、標準I / Oを使用した場合の出力をフラッシュすることを確認したい。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top