web-dev-qa-db-ja.com

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

私のインストラクターは、パイプを使用して、テストケースのリストで構成されるテキストファイルを、入力ファイルからテストケースを取得する作業プログラムに適用するように言っています。私が持っていると言います

test_cases.txt
my_program //my Java program after compliation

そして私がこれをしたとき

Java my_program | test_cases.txt

それは与えます

[1]+ Stopped               Java my_program | test_cases.txt

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

3
夢のの夢

まず、パイプは、ファイル(テキストファイルを含む)ではなく、2つのプロセスを接続し、一方の出力が他方の入力に送られるようにします。推定では、出力を「生成」するプロセスはSTDOUTに送信し、パイプのソースとなり、入力を「受信」するプロセスはSTDINからそれを読み取り、パイプの宛先。パイプをプロセスにのみ接続して、テキストファイルやその他のファイルに接続することはできません。

次に、パイプを使用する場合、パイプの左側のプロセスはSTDOUTを使用するプロセスであり、パイプの右側のプロセスはSTDINを使用します。したがって、試行されたコマンドは、my_programoutputをパイプに送信しようとし、パイプから読み取らないようにします。

与えられた指示を適切に提示した場合、それはとにかく機能しません。手順は、「...動作するプログラムが入力ファイルからテストケースを取得する」で終わります。プログラムがファイルから入力を受け取る場合、それはSTDINから読み取らないので、とにかくパイプからのデータを無視します。

パイプで機能させるには、my_programを記述してSTDINから読み取る必要があります。これは、プロンプトで手動でテストケースを入力することを想定しているためです。次に、コマンドラインを次のように書き直すことができます

cat text_cases.txt | jave my_program

catプロセスであり、テキストファイルを読み取ってその内容をSTDOUTに送信し、my_programSTDIN手動で入力する代わりにパイプを使用します。 Javaがパイプに接続する方法がわからないので、これは、インストラクターがそのメソッドを使用するように要求したため、標準的な方法で動作するという前提に基づいています。

IMHOパイプよりもリダイレクションを使用する方が、リソース使用量が少ない場合と同じです。

Java my_program < test_cases.txt

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

6
user207673