この章の概要です。
リダイレクトとは、標準ストリームの具体的な出力先や入力元を変更する機能のことです。
標準ストリームは標準出力、標準入力、標準エラーといった標準的に利用できる入出力の経路のことです。C言語でいえば stdout、stdin、stderr、C++ ではいえば std::cout、std::cin、std::cerr といったもので取り扱うことができます。C言語の場合は、printf関数や puts関数、scanf関数といったものを使うことが多いですが、これらは標準出力や標準入力に対して入出力を行っています。
ほとんどの環境では、標準出力と標準エラーは画面(コマンドプロンプトなど)に表示するようになっており、標準入力はキーボードから入力を受け取るようになっていますが、この出力先や入力元を変更する機能がリダイレクトです。
コマンドプロンプトからコンソールアプリを実行するとき、たとえば「HelloWorld.exe」であれば、次のように実行しますが、
HelloWorld
ここに専用の構文で記述を追加することで、リダイレクトを行えます。
コンソールアプリを実行する方法については、「コンソールアプリを実行する」のページで説明しています。
標準出力の出力先を変更するには、>
に続けて、新しい出力先を指定します。よくあるのは、どこかファイルに出力するように変更することです。たとえば、test.txt
へ出力させるようにするには、次のようにします。
HelloWorld > test.txt
HelloWorld.exe の実行の中で、標準出力へ出力したものはすべて test.txt へ書き出されるようになります。test.txt が存在しなければ自動的に作成されます。
test.txt
がすでに存在しており、その中身があった場合、既存の内容は上書きされることに注意してください。上書きではなく、末尾に書き足すような動作を望むのならば、>
の代わりに >>
を用います。
HelloWorld >> test.txt
プログラムにコマンドライン引数を渡す場合、HelloWorld 15 24 > test.txt
といったように、プログラム名に続いてコマンドライン引数を記述してから、リダイレクトの記述を続けます。
標準エラーの出力先を変更するには、2>
に続けて、新しい出力先を指定します。
HelloWorld 2> error.txt
HelloWorld.exe の実行の中で、標準エラーへ出力したものはすべて error.txt へ書き出されるようになります。
標準出力の場合と同様、error.ext
の内容は上書きされます。書き足したければ 2>>
にします。
HelloWorld 2>> error.txt
2>
の 2
の部分は標準エラーであることを表しています。ちなみに 1
にすると標準出力のことになり 1>
のようにして標準出力のリダイレクトが可能ですが、前述のように
>
とするだけで同じ意味になります(0
は標準入力です)。
標準入力の入力元を変更するには、<
に続けて、新しい入力元を指定します。
HelloWorld < hello.txt
HelloWorld.exe の実行の中で、標準入力から入力を受け取っている箇所はすべて、hello.txt の内容からデータを受け取るようになります。
標準出力へデータを書き出すプログラムと、標準入力からデータを受け取るプログラムがあるとき、前のプログラムが書き出したデータを直接受け取るように実行させることが可能です。
program1 | program2
このように |
で区切って実行することにより、まず program1
が実行されます。実行を終えたあと、program2
の実行が開始されますが、program1
が標準出力へ書き出したデータを、program2
は標準入力から受け取ります。この機能はパイプと呼ばれます。
次のように実行したのとほぼ同等の意味になりますが、一時ファイルを作る(そして削除する)必要がなく、記述もシンプルになります。
program1 > temp.txt <-- program1 を実行。標準出力への出力内容は temp.txt へ書き出す
program2 < temp.txt <-- program2 を実行。標準入力からの入力は temp.txt の内容を読み取る
rm temp.txt <-- データの受け渡しに使った一時ファイルを削除
パイプとリダイレクトを組み合わせることは可能です。次の例は、program1 は標準入力の入力を data.txt から受け取り、標準出力へ書き出した内容が program2 に引き渡され、program2 は標準エラーへの出力を error.txt へ書き出します。
program1 < data.txt | program2 2> error.txt
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |