標準エラー出力について

printf

よく知ってるはずの printf は、標準出力。 このプログラム hello1.cpp

/* hello1.cpp */
#include <stdio.h>
int main(void)
{
  printf("Hello!\n");
  return 0;
}
を作成し、コンパイルする。 エラーが発生しなくて、うまくいけば、 UNIX系のプログラミング環境下で、 実行ファイルa.outができる。

./a.out [returnキー入力] を実行

目の前の画面に、
Hello!
と表示される。

標準出力とは、 特に指定がなければ、目の前の画面となる。

./a.out > hello1.txt [returnキー入力] を実行

目の前の画面には、 何も表示されない。 新しく、 hello1.txt というテキストファイルができた。 hello1.txt の中を確認すると、先ほど画面表示されたのと同じ結果が、ファイルに 書き込まれている。

出力先を、ファイルに指定すれば、標準出力 の出力先が、ファイルに切り替えることができる。

stderr

標準エラー出力 は standard error output で、 stderr と表記する。

今度は、次のプログラム hello2.cpp

/* hello2.cpp */
#include <stdio.h>
int main(void)
{
  fprintf(stderr,"Hello!\n");
  return 0;
}
を作成し、コンパイルする。 エラーが発生しなくて、うまくいけば、 UNIX系のプログラミング環境下で、同様にして、 実行ファイルa.outができる。 名前は同じだが、hello1.cpp とは、別の実行ファイル。

./a.out [returnキー入力] を実行

目の前の画面に、
Hello!
と表示される。 これは、標準出力と同じ結果だ。

標準エラー出力を指定しても、標準出力と同じく、 目の前の画面となる。

./a.out > hello2.txt [returnキー入力] を実行

目の前の画面に、
Hello!
と表示される。 標準出力では、画面に表示されなかったので、 これは、標準出力とはまったく異なる。 新しく hello2.txt というテキストファイルができたものの、 念のために、 中身を確認すると、 hello2.txt 空っぽだ

標準エラー出力を指定すると、 出力先を、ファイルに切り替えることができない

stdout

プログラム hello1.cpp は、単に printf 表記で、省略した書き方であるが、 stderr の代わりに、stdoutにすると、 標準出力となる。 hello3.cpp

まとめ

標準出力 は、出力先を、目の前の画面、ファイル、プリンタ、 その他の機器、通信相手先などに切り替え可能

標準エラー出力 と指定すると、 目の前の画面だけとなり、 切り替えできない

リダイレクト とは、標準出力の場合のように、 出力先を簡単に切り替えができることをいう。 UNIX系OSの場合には 「>」 を使って切り替える。