FOPEN(3) FOPEN(3) 名前 fopen, fdopen, freopen - ストリームを開く関数 書式 #include FILE *fopen( char *path, char *mode); FILE *fdopen( int fildes, char *mode); FILE *freopen( char *path, char *mode, FILE *stream); 説明 fopen 関数は、path で名前が指定されているファイルを開きス トリームに連結する。 引数mode は、以下に続く文字のひとつから始まる文字列のポイ ンタである。(追加の文字がこの文字の後に続くこともできる): r テキストファイルを読み取るために開く。ストリームはフ ァイルの先頭に位置される。 r+ 読み取りおよび書き込み(更新)するために開く。ストリー ムはファイルの先頭に位置される。 w もとのファイルを長さゼロに切り取る。または、書き込む ためにテキストファイルを新たに作成する。ストリームは ファイルの先頭に位置される。 w+ 読み取りおよび書き込み(更新)のために開く。ファイルが 存在していない場合には新たに作成する。存在している場 合には長さゼロに切り取る。ストリームはファイルの先頭 に位置される。 a 書き込みのために開く。ファイルが存在していない場合に は新たに作成する。ストリームはファイルの最後に位置さ れる。 a+ 読み取りおよび書き込み(更新)のために開く。ファイルが 存在していない場合には新たに作成する。ストリームはフ ァイルの最後に位置される。 mode 文字列は、第3の文字としても、または上述のどの2文字の 文字列の間にも、文字``b''を含むことができる。これは、ANSI C3.159-1989 (``ANSI C'')との互換性のための厳密性であり、関 数の実行に対してどのような影響も持たない。すなわち、この ``b''は無視される。 13 December 1995 1 FOPEN(3) FOPEN(3) すべての生成されたファイルは、そのプロセスによってumask値 が修正されたかのように S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH (0666) のモードを 持つ。( umask(2) を見よ) read/writeストリームに対しては任意の順序で読み書きを行うこ とができる。入力操作が end-of-file に到達しない間はファイ ル位置決め関数が入出力間に介在することを、ANSI Cが要請して いることに注意をしてほしい。(この状態が満たされていないと 、読み込みは、最も新しい書き出し以外の結果を返すことを許し てしまう。) それゆえ、このようなストリームでの読み書き操作 の間にfseek またはfgetpos 操作を置いてみることは良い習慣で ある。(そして、実際に Linux では時々必要となる) この操作は 、( fseek(..., 0L, SEEK_CUR) が同調のために使われるように) 見かけ上は何もしない操作(no-op)になるかもしれない。 fdopen 関数は、既存のファイルディスクリプターfildes にスト リームを結びつける。このストリームのmode は、結びつけたい ファイルディスクリプターのモードと互換性がなければならない 。このとき、ファイルディスクリプターは複製されない。 freopen 関数はpath で名前が指定されたファイルを開き、stream で指定されたストリームに、そのファイルを連結する。もとのス トリームは(もし存在する場合には)閉じられる。mode 引数はfopen 関数と同じ形で使われる。freopen 関数の第一の使用方法は、標 準テキストストリーム(stderr、stdin、またはstdout) に連結し ているファイルを変更することである。 返り値 成功した時にはfopen, fdopen そしてfreopen はFILE ポインタ を返す。そうでない場合にはNULL が返され、外部変数errno が エラーを示すためにセットされる。 エラー EINVAL fopen, fdopen, またはfreopen で与えられたmode が不適 切である。 fopen, fdopen そしてfreopen 関数はmalloc(3) ルーチンで特定 されるエラーについてerrno をセットする。 fopen 関数はopen(2) ルーチンで特定されるエラーについてerrno をセットする。 13 December 1995 2 FOPEN(3) FOPEN(3) fdopen 関数はfcntl(2) ルーチンで特定されるエラーについて errno をセットする。 freopen 関数はopen(2), fclose(3) そしてfflush(3) 各ルーチ ンで特定されるエラーについてerrno をセットする。 関連項目 open(2), fclose(3) 準拠 fopen 関数とfreopen 関数は ANSI C3.159-1989 (``ANSI C'')に 準拠する。fdopen 関数は IEEE Std1003.1-1988 (``POSIX.1'') に準拠する。 13 December 1995 3