other versions
other languages
FOPEN(3) | Linux Programmer's Manual | FOPEN(3) |
名前¶
fopen, fdopen, freopen - ストリームを開く関数書式¶
#include <stdio.h> FILE *fopen(const char *path, const char *mode); FILE *fdopen(int fd, const char *mode); FILE *freopen(const char *path, const char *mode, FILE *stream);
glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
fdopen(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
説明¶
fopen() 関数は、 path で指定された名前のファイルを開き、ストリームと結びつける。 引数 mode は、以下に続く文字のひとつから始まる文字列へのポインタであ る (以下の述べる、追加の文字が後に続くこともある):- r
- テキストファイルを読み出すために開く。 ストリームはファイルの先頭に位置される。
- r+
- 読み出しおよび書き込みするために開く。 ストリームはファイルの先頭に位置される。
- w
- ファイルを書き込みのために開く。 ファイルが既に存在する場合には長さゼロに切り詰める。 ファイルがなかった場合には新たに作成する。 ストリームはファイルの先頭に位置される。
- w+
- 読み出しおよび書き込みのために開く。 ファイルが存在していない場合には新たに作成する。 存在している場合には長さゼロに切り詰められる。 ストリームはファイルの先頭に位置される。
- a
- 追加 (ファイルの最後に書き込む) のために開く。 ファイルが存在していない場合には新たに作成する。 ストリームはファイルの最後に位置される。
- a+
- 読み出しおよび追加 (ファイルの最後に書き込む) のために開く。 ファイルが存在していない場合には新たに作成する。 読み出しの初期ファイル位置はファイルの先頭であるが、 書き込みは常にファイルの最後に追加される。
fseek(stream, 0, SEEK_END);fdopen() 関数は、既存のファイル記述子 fd にストリームを結びつける。 ストリームの mode ("r", "r+", "w", "w+", "a", "a+" のいずれか) は ファイル記述子のモードと互換のものでなければならない。 新しいストリームのファイル位置指示子は fd に属している値に設定される。 error と end-of-file の各指示子はクリアされる。 "w" および "w+" モードでのファイルの切り詰めは行われない。 ファイル記述子の複製は行なわれない。 fdopen() で作成されたストリームが閉じられたときにファイル記述子も 閉じられる。 共有メモリのオブジェクトへ fdopen() を行ったときの結果は定義されていない。 freopen() 関数は path で名前が指定されたファイルを開き、 stream で指定されたストリームに、そのファイルを結びつける。 もとのストリームは (もし存在する場合には) 閉じられる。 mode 引数は fopen() 関数と同じ形で使われる。 freopen() 関数の主な用途は、標準テキストストリーム ( stderr, stdin, stdout) と対応付けられているファイルを変更することである。
返り値¶
fopen(), fdopen(), freopen() は成功すると FILE 型のポインタを返す。 失敗すると NULL が返され、 errno がエラーを示す値にセットされる。エラー¶
- EINVAL
- fopen(), fdopen(), freopen() で与えられた mode が不適切である。
準拠¶
fopen() 関数と freopen() 関数は C89に準拠している。 fdopen() 関数は POSIX.1-1990 に準拠している。注意¶
glibc での注意¶
GNU C ライブラリでは、 mode に指定できる文字列として、以下の拡張が行われている:- c (glibc 2.3.3 以降)
- open 操作、それに続く read/write 操作の、 スレッドの取り消しポイント (cancellation points) を作成しない。 このフラグは fdopen() では無視される。
- e (glibc 2.7 以降)
- O_CLOEXEC フラグを有効にしてファイルをオープンする。詳細は open(2) を参照。このフラグは fdopen() では無視される。
- m (glibc 2.3 以降)
- I/O システムコール (read(2), write(2)) ではなく、 mmap(2) を使ってファイルにアクセスしようとする。 mmap(2) を使おうとするのは、読み出し用にオープンするファイルについてだけである。
- x
- ファイルを排他的にオープンする ( open(2) の O_EXCL フラグと同様)。 ファイルがすでに存在する場合、 fopen() は失敗し、 errno に EEXIST がセットされる。 このフラグは fdopen() では無視される。
バグ¶
mode の個々のフラグ文字 ("ccs" 指定の前の文字) を解釈する際に、 glibc の fopen() と freopen() の実装では、 mode の確認を最大 7 文字しか行わないという制限がある (バージョン 2.14 より前の glibc では最大 6 文字だが、 6 文字では "rb+cmxe" などの指定を行うには不十分であった)。 fdopen() の現在の実装では最大 5 文字の mode しか解釈されない。関連項目¶
open(2), fclose(3), fileno(3), fmemopen(3), fopencookie(3)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2012-04-22 | GNU |