freopen, freopen_s
提供: cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
| ヘッダ <stdio.h> で定義
|
||
| (1) | ||
FILE *freopen( const char *filename, const char *mode, FILE *stream ); |
(C99未満) | |
FILE *freopen( const char *restrict filename, const char *restrict mode, FILE *restrict stream ); |
(C99以上) | |
errno_t freopen_s(FILE *restrict *restrict newstreamptr, const char *restrict filename, const char *restrict mode, FILE *restrict stream); |
(2) | (C11以上) |
1) まず、あらゆるエラーを無視して
stream に紐付けられたファイルを閉じることを試みます。 その後、 filename がヌルでなければ、 fopen によって行われたかのように、 mode を使用して filename で指定されたファイルを開くことを試み、そのファイルを stream の指すファイルストリームに紐付けます。 filename がヌルポインタの場合は、すでに stream に紐付けられているファイルを開き直すことを試みます (この場合にモード変更が可能かどうかは処理系定義です)。2) (1) と同じですが、
mode は fopen_s でのように扱われ、ファイルストリームを指すポインタは newstreamptr に書き込まれ、以下のエラーが実行時に検出され、現在設定されている制約ハンドラ関数を呼びます。
newstreamptrがヌルポインタ。streamがヌルポインタ。modeがヌルポインタ。
- すべての境界チェック付き関数と同様に、
freopen_sは__STDC_LIB_EXT1__が処理系によって定義されていて、<stdio.h>をインクルードする前にユーザが__STDC_WANT_LIB_EXT1__を整数定数 1 に定義した場合にのみ、利用可能であることが保証されます。
引数
| filename | - | ファイルストリームを紐付けるファイル名 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| mode | - | 新しいファイルアクセスモードを決定するヌル終端文字列
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| stream | - | 変更するファイルストリーム | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| newstreamptr | - | 結果を格納するポインタへのポインタ (出力引数) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
戻り値
1) 成功した場合は
stream の値のコピー、失敗した場合はヌルポインタ。2) 成功した場合はゼロ (また、
stream の値のコピーが *newstreamptr に書き込まれます)、エラーの場合は非ゼロ (また、 newstreamptr 自体がヌルポインタでなければ、ヌルポインタが *newstreamptr に書き込まれます)。ノート
freopen は入出力操作または fwide によっていったん確立されたストリームのナロー/ワイド指向を変更する唯一の方法です。
例
以下のコードは stdout をファイルにリダイレクトします。
Run this code
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
puts("stdout is printed to console");
if (freopen("redir.txt", "w", stdout) == NULL)
{
perror("freopen() failed");
return EXIT_FAILURE;
}
puts("stdout is redirected to a file"); // this is written to redir.txt
fclose(stdout);
}
出力:
stdout is printed to console
参考文献
- C11 standard (ISO/IEC 9899:2011):
- 7.21.5.4 The freopen function (p: 307)
- K.3.5.2.2 The freopen_s function (p: 590)
- C99 standard (ISO/IEC 9899:1999):
- 7.19.5.4 The freopen function (p: 272-273)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.9.5.4 The freopen function
関連項目
(C11) |
ファイルを開きます (関数) |
| ファイルを閉じます (関数) | |
freopen の C++リファレンス
| |