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

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

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


fopen_s関数

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

引数filename に指定した名前を持ったファイルをオープンし、ストリームを結びつける。


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


引数mode に与えられるオープンモードとしては、まず fopen関数と同様のものが使用できる。それらに加えて、wa を含んでいるオープンモードの頭に u を付加したものが使える。u が付加されたオープンモードでは、ファイルを開いたユーザー以外に対しては、システムのデフォルトのアクセス権限が与えられる。


この関数は、__STDC_LIB_EXT1__ 事前定義マクロが定義されている処理系でのみ使用できる。また、この関数を使用するのなら、<stdio.h> をインクルードする前に、__STDC_WANT_LIB_EXT1__ という名前のマクロを、置換結果 1 として定義することが作法となっているが、これを行わずとも関数を使用できる処理系もあり得る。
注意

FOPEN_MAXマクロで定義された数を超えてファイルを開くことはできない。

開かれたファイルの使用を終えたら fclose関数で閉じる。
使用例
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE* fp = NULL;
    if (fopen_s(&fp, "hello.txt", "w") != 0) {
        fputs("ファイルオープンに失敗しました。\n", stderr);
        exit(EXIT_FAILURE);
    }

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

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

実行結果(標準出力):

実行結果(hello.txt):

Hello, World
関連

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

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

ストリームとの結びつきを変えずにファイルを開き直す freopen_s関数がある。
解説章


参考リンク 🔗

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


更新履歴 🔗



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

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

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

Programming Place Plus のトップページへ



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