FromNandの日記

自分的備忘録

標準出力(stdout)と標準エラー出力(stderr)の違いについて

標準出力(stdout)と標準エラー出力(stderr)の違いについてまとめていく。


標準出力と標準エラー出力の主な違いはリダイレクトできるかできないかの違いが大きいらしい。
標準出力はリダイレクトが行われるが、標準エラー出力の方では普通はリダイレクトが行われない。


他にも標準出力ではバッファがかまされているが、標準エラー出力ではバッファが使用されていないみたいなことも聞いたことがある。(嘘かも)
これの理由については、おそらくエラー出力をする際は緊急時で、そんなときにバッファなぞを利用している暇はないのだろう。


次のコードでは、標準出力に「stdout」、標準エラー出力に「stderr」という文字列を出力している。
一応、このコードは「test.c」というファイルに保存している。

#include<stdio.h>

int main(void){
    fprintf(stdout, "stdout");
    fprintf(stderr, "stderr");
    return 0;
}


そして、コマンドラインで次のようなコマンドを打ち込む。

gcc -o test test.c
./test > stderr.txt


すると、stderr.txtの内容は次のようになる。

stdout


つまり、「fprintf(stdout, "stdout")」の方だけがリダイレクトされている。
また、コマンドラインで次のように記述すると、標準出力と標準エラー出力に分けてファイルに出力することができるらしいのでやってみた。

./test 1>stdout.txt 2>stderr.txt


こうすると、stdout.txtには「stdout」、stderr.txtには「stderr」の文字列が保存されていた。