freopen関数は、オープン済みのファイルを閉じて、別のファイルをオープンします。主に、標準テキスト・ストリーム(stderr、stdin、stdout)と対応付けられているファイルを変更するために使用します。
#include <stdio.h>
FILE *freopen(const char *path, const char *mode, FILE *stream);
*pathはオープンするファイルのパス名を文字列で指定します。
*modeは入出力の区分(モード)を文字列で指定します。
*streamは既に作成済みのファイルポインタを指定します。第1引数で指定したファイルのファイルポインタに内容を変更します。
第2引数の*modeに付いてはopen関数を参照してください。
戻り値として、正常にオープンできた場合は、FILE 型のポインタ(ファイルポインタ)を返し、エラーの場合は、NULL値を返します。
次の例題プログラムは標準出力(stdout)をtemp_1.txtファイルに切り替えています。
プログラム 例
#include <stdio.h> #define BUFF_SIZE 1024 int main() { FILE *fp; char buff[BUFF_SIZE]; int return_code = 0; /* 標準出力をtemp_1.txtファイルに切り替える */ if ((fp = freopen('temp_1.txt', 'w', stdout)) != NULL) { /* 標準入力から1行入力 */ while (fgets(buff, BUFF_SIZE, stdin) != NULL) { printf('%s', buff); } fclose(fp); } else { printf('ファイルの再オープンに失敗しました\n'); return_code = 1; } return return_code; }
例の実行結果
$ ./freopen.exe Hello World!!. Bye. $ $ cat temp_1.txt Hello World!!. Bye. $