freopen_s | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


freopen_s関数

概要 ファイルを開きなおす
ヘッダ stdio.h
形式 errno_t freopen_s(FILE* restrict* restrict newstreamptr, const char* restrict filename, const char* restrict mode, FILE* restrict stream);
引数 newstreamptr オープンしたファイルを制御するための FILEオブジェクト を受け取るメモリアドレス。ヌルポインタであってはならない。
filename ファイル名。あるいはヌルポインタ
mode モード。ヌルポインタであってはならない。
stream すでに開かれているストリーム。ヌルポインタであってはならない。
戻り値 成功した場合は 0。失敗した場合は 0以外。
詳細

freopen関数の安全性を高めた関数である。freopen関数と違い、開かれたファイルを操作するための FILEオブジェクトは戻り値でなく、引数に渡したポインタが指す先に格納される。また、wa を含んだオープンモードで開かれたファイルは、デフォルトではほかのユーザーが同じファイルをアクセスすることを禁じられるようになっている。実行時に検出できる問題があれば実行時制約違反となり失敗する(この場合、引数newstreamptr がヌルポインタでなければ、*newstreamptr にヌルポインタが格納される)


引数mode に指定できる内容は fopen_s関数と同様であるのでそちらを参照のこと(fopen関数とは異なることがある点に注意)。


この関数は、__STDC_LIB_EXT1__ 事前定義マクロが定義されている処理系📘で使用できる。このマクロが定義されていない場合に使用できるかどうかは処理系定義である。また、この関数を使用するのなら、<stdio.h> をインクルードする前に、__STDC_WANT_LIB_EXT1__ という名前のマクロを、置換結果 1 になるように定義する。このマクロが 0 に置換されると、この関数は宣言・定義されない[1]
注意 ファイルの使用を終えたら fclose関数で閉じる。
使用例
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE* stream = NULL;
    if (freopen_s(&stream, "test.txt", "w", stdout) != 0) {
        fputs("freopen が失敗しました。\n", stderr);
        exit(EXIT_FAILURE);
    }

    if (fputs("test message\n", stream) == EOF) {
        fputs("ファイルへの書き込みに失敗しました。\n", stderr);
        exit(EXIT_FAILURE);
    }

    if (fclose(stream) == EOF) {
        fputs("ファイルクローズに失敗しました。\n", stderr);
        exit(EXIT_FAILURE);
    }
}

実行結果(標準出力):

実行結果(test.txt):

test message
関連

freopen関数はこの関数の元になった古い関数である。

ファイルを閉じるには fclose関数を用いる。
解説章


参考リンク 🔗

本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place 管理者に紹介料が支払われています。


更新履歴 🔗



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る