パイプを使用してプログラムにテキストを適用する方法

パイプを使用してプログラムにテキストを適用する方法

先生は、パイプを使用して入力ファイルからテストケースをインポートするワーカープログラムに、テストケースのリストを含むテキストファイルを適用するように言いました。私が持っていると言う

test_cases.txt
my_program //my java program after compliation

私がするとき

java my_program | test_cases.txt

それを与える

[1]+ Stopped               java my_program | test_cases.txt

パイプの使い方がわからない方..

答え1

まず、パイプは2つを接続します。プロセス、ファイル(テキストファイルを含む)の代わりに、あるファイルの出力が別のファイルの入力に移動されるようにします。出力を「生成」するプロセスがこれをSTDOUTパイプのソースになり、入力を「受信」するプロセスが から出力を読み込むことがSTDINパイプの対象となると仮定します。パイプをテキストファイルまたは他のファイルに関連付けることはできず、プロセスにのみ接続できます。

第二に、パイプを使用する場合、パイプの左側のプロセスはを使用しSTDOUT、パイプの右側のプロセスはを使用しますSTDIN。だから、あなたが試しているコマンドは送信しようとします出力my_programパイプから読むのではなく、パイプに。

提供された指示を正しく提示すると、とにかく機能しません。ディレクティブは、「...オペレータが入力ファイルからテストケースを取得します」で終わります。プログラムがファイルから入力を受け取ると、いいえから読み、STDINとにかくパイプのデータを無視します。

パイプと連携するには、メッセージが表示されたときにテストケースを手動で入力する必要があるかのように読み取るようmy_programに作成する必要があります。STDINその後、コマンドラインを次のように書き直すことができます。

cat text_cases.txt | jave my_program

catプロセステキストファイルを読み取り、その内容をに送信してからSTDOUT手動my_programで入力するのではなく、パイプを使用してデータを「読み取り」します。STDINJavaがパイプとどのようにインタフェースするかわからないため、インストラクターがその方法を使用するように要求したため、標準的な方法で動作するという仮定に基づいています。

IMHO、リソース使用量が少ないため、リダイレクトを使用する方がパイプよりも優れています。

java my_program < test_cases.txt

つまり、このステップが後でパイプを使用する必要があるプロセスのより大きなプロセスチェーンに含まれていない限りです。

関連情報