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

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

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


fopen関数

概要

ファイルを開く。

ヘッダ

stdio.h

形式

FILE* fopen(const char* restrict filename, const char* restrict mode);

引数

filename

ファイル名。

mode

モード。

戻り値

成功した場合は、オープンしたファイルを制御するための FILEオブジェクトへのポインタを返す。失敗した場合は、ヌルポインタを返す。

詳細

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


ファイル名は、環境に応じたファイルパスの表現を受け付ける。たとえば、Windows では “documents\\test.txt” や “test.txt” といった表記により、カレントディレクトリにある documentsディレクトリ内の test.txt を開くことができる。また、受け付けられることが保証された最大長は、FILENAME_MAXマクロで与えられている。
引数mode には、以下の指定を与えられる。

モード 意味
r テキストファイルを読み込み用に開く
w テキストファイルを書き込み用に開く
a テキストファイルを追記用に開く
rb バイナリファイルを読み込み用に開く
wb バイナリファイルを書き込み用に開く
ab バイナリファイルを追記用に開く
r+ テキストファイルを読み書き両用に開く
w+ テキストファイルを読み書き両用に開く
a+ テキストファイルを読み書き両用で追加あるいは作成する
rb+ または r+b バイナ リファイルを読み書き両用に開く
wb+ または w+b バイナ リファイルを読み書き両用に開く
ab+ または a+b バイナ リファイルを読み書き両用で追加あるいは作成する

処理系によっては、これらのモード名の後ろに何らかの文字列を続ける形で、独自のモードを提供していることがある。たとえば、Visual Studio では、“r, ccs=UNICODE” のような形で、Unicode (UTF-16LE) のデータを入出力できる。

モードごとに、以下の表のような動作の違いがある。

r、rb w 、wb a、 ab r+、 rb+ w+、w b+ a+、ab +
読み取り できる できない できない できる できる できる
書き込み できない できる できる できる できる できる
開くとファイルの中身は… そのまま 失わ れる そのまま そのまま 失われる そのまま
開くとファイルポジションは… 先頭にある 先頭にある 終わりにある 先頭にあ る 先頭にある 終 わりにある
ファイルが存在しないときに開こうとすると… 失敗する 空のファイルが作られる 空のファイルが作られ る 失敗する 空のファイルが作られる 空のファイルが作られる

注意

同時に開くことができるファイルの最大数が、FOPEN_MAXマクロで与えられている。

使用例

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE* fp = fopen("hello.txt", "w");
    if (fp == NULL) {
        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

関連

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

解説章

第39章


参考リンク


更新履歴

’2018/4/20 「NULL」という表記を「ヌルポインタ」に修正。

’2018/4/8 「詳細」にモードごとの動作をまとめた表を追加。
処理系独自のモードについて、VisualStudio での例を挙げた。

’2018/1/22 新規作成。



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

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

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

Programming Place Plus のトップページへ



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