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 |