それで、ここまでは茶番でした。
標準出力に文字列を送るのは echo / cat とか printf / puts とかでできますが、こうした関数では狭い分野での活用しかできません。
標準出力に限らず、送りたい出力ストリーム( output stream )を指定できれば、ぐっとプログラミングの幅が広がりそうです。
ファイル入出力というと間違いなく使えるのが fprintf です。
printf と同じ? ええ…
(´・ω・`)
実はそう単純な話でもないんですよね… これが。
まずは関数の宣言です。
int fprintf(FILE *stream, const char *format, ...);
FILE というオブジェクトを指すポインター stream を引数で指定できるようになってます。
stream には出力ストリームを指定できます。
例えば以下のようなものです。
stdout は標準出力、 stderr には標準エラーを出力先とできます。
では試して見ましょう。
main.c.
1 #include <stdio.h> 2 3 int main() 4 { 5 int x = 100; 6 printf("0x%x\n",x); 7 fprintf(stdout,"%d\n",x); 8 fprintf(stderr,"error\n"); 9 return 0; 10 }
fprintf の出力結果は、標準出力と標準エラーの 2 つにわけられるので、ファイル記述子を指定すれば正確に何が起きているのが把握できます。
$ ./a.out 0x64 100 error $ ./a.out 1>/dev/null error $ ./a.out 2>/dev/null 0x64 100 $ ./a.out 1>/dev/null 2>/dev/null
このように使うことができますね。
Copyright 2018-2019, by Masaki Komatsu