私のインストラクターは、パイプを使用して、テストケースのリストで構成されるテキストファイルを、入力ファイルからテストケースを取得する作業プログラムに適用するように言っています。私が持っていると言います
test_cases.txt
my_program //my Java program after compliation
そして私がこれをしたとき
Java my_program | test_cases.txt
それは与えます
[1]+ Stopped Java my_program | test_cases.txt
パイプの使い方がわからない...
まず、パイプは、ファイル(テキストファイルを含む)ではなく、2つのプロセスを接続し、一方の出力が他方の入力に送られるようにします。推定では、出力を「生成」するプロセスはSTDOUT
に送信し、パイプのソースとなり、入力を「受信」するプロセスはSTDIN
からそれを読み取り、パイプの宛先。パイプをプロセスにのみ接続して、テキストファイルやその他のファイルに接続することはできません。
次に、パイプを使用する場合、パイプの左側のプロセスはSTDOUT
を使用するプロセスであり、パイプの右側のプロセスはSTDIN
を使用します。したがって、試行されたコマンドは、my_program
のoutputをパイプに送信しようとし、パイプから読み取らないようにします。
与えられた指示を適切に提示した場合、それはとにかく機能しません。手順は、「...動作するプログラムが入力ファイルからテストケースを取得する」で終わります。プログラムがファイルから入力を受け取る場合、それはがSTDIN
から読み取らないので、とにかくパイプからのデータを無視します。
パイプで機能させるには、my_program
を記述してSTDIN
から読み取る必要があります。これは、プロンプトで手動でテストケースを入力することを想定しているためです。次に、コマンドラインを次のように書き直すことができます
cat text_cases.txt | jave my_program
cat
はプロセスであり、テキストファイルを読み取ってその内容をSTDOUT
に送信し、my_program
はSTDIN
手動で入力する代わりにパイプを使用します。 Javaがパイプに接続する方法がわからないので、これは、インストラクターがそのメソッドを使用するように要求したため、標準的な方法で動作するという前提に基づいています。
IMHOパイプよりもリダイレクションを使用する方が、リソース使用量が少ない場合と同じです。
Java my_program < test_cases.txt
つまり、これが、パイプの使用が必要になるコースの後半で、プロセスのより大きなチェーンに含まれる1つのステップでない限り。