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

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

先頭へ戻る

fopen関数

概要 ファイルを開く。
ヘッダ stdio.h
形式 FILE* fopen(const char* filename, const char* mode);
引数 filename ファイル名。
mode モード。
戻り値 成功した場合は、オープンしたファイルを制御するための FILEオブジェクトへのポインタを返す。失敗した場合は、ヌルポインタを返す。
詳細 引数filename に指定した名前を持ったファイルをオープンし、ストリームを結びつける。
ファイル名は、環境に応じたファイルパスの表現を受け付ける。例えば、Windows では "documents\\test.txt" や "documents/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 バイナリファイルを読み書き両用で追加あるいは作成する
コンパイラによっては、これらのモード名の後ろに何らかの文字列を続ける形で、独自のモードを提供していることがある。例えば、VisualStudio では、"r, ccs=UNICODE" のような形で、Unicode (UTF-16LE) のデータを入出力できる。
モードごとに、以下の表のような動作の違いがある。
r、rb w、wb a、ab r+、rb+ w+、wb+ 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 );
    }

    fputs( "Hello, World\n", fp );

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

    return 0;
}

実行結果(標準出力)


実行結果(hello.txt)

Hello, World
関連 ファイルを閉じるには fclose関数を用いる。
解説章 第39章


参考リンク



更新履歴

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

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

'2018/1/22 新規作成。



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

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

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

Programming Place Plus のトップページへ


はてなブックマーク Pocket に保存 Twitter でツイート Twitter をフォロー
Facebook でシェア Google+ で共有 LINE で送る rss1.0 取得ボタン RSS