先生は、パイプを使用して入力ファイルからテストケースをインポートするワーカープログラムに、テストケースのリストを含むテキストファイルを適用するように言いました。私が持っていると言う
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
で入力するのではなく、パイプを使用してデータを「読み取り」します。STDIN
Javaがパイプとどのようにインタフェースするかわからないため、インストラクターがその方法を使用するように要求したため、標準的な方法で動作するという仮定に基づいています。
IMHO、リソース使用量が少ないため、リダイレクトを使用する方がパイプよりも優れています。
java my_program < test_cases.txt
つまり、このステップが後でパイプを使用する必要があるプロセスのより大きなプロセスチェーンに含まれていない限りです。