スポンサーリンク

FOPEN(3) FreeBSD ライブラリ関数マニュアル FOPEN(3)

名称

fopen, fdopen, freopen − ストリームをオープンする関数

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <stdio.h>

FILE *

fopen(const char *path, const char *mode);

FILE *

fdopen(int fildes, const char *mode);

FILE *

freopen(const char *path, const char *mode, FILE *stream);

解説

fopen() 関数は、 path が指す文字列の名前を持つファイルをオープンし、それ にストリームを関連付けます。

引数 mode は、以下のシーケンスの 1 つで始まる文字列を指します (このシーケ ンスには、別のキャラクタが続いても構いません)。

       ‘‘r’’

テキストファイルを読込み用にオープンします。ストリームは、ファイ ルの最初に位置付けられます。

‘‘r+’’
読込み用と書込み用にオープンします。ストリームは、ファイルの最初 に位置付けられます。

‘‘w’’
書込み用に、ファイルを長さ 0 に切りつめるか、テキストファイルを作 成します。ストリームは、ファイルの最初に位置付けられます。

‘‘w+’’
読込み用と書込み用にオープンします。ファイルが存在しない場合はそ のファイルが作成され、存在する場合は切りつめられます。ストリーム は、ファイルの最初に位置付けられます。

‘‘a’’
書込み用にオープンします。ファイルが存在しない場合はそのファイル が作成されます。ストリームは、ファイルの最後に位置付けられます。 それに続くファイルへの書き込みは、 fseek(3) のような操作の介在に 関わりなく、常にファイルの現時点での最後へと行われます。

‘‘a+’’
読込み用と書込み用にオープンします。ファイルが存在しない場合はそ のファイルが作成されます。ストリームは、ファイルの最後に位置付け られます。それに続くファイルへの書き込みは、 fseek(3) のような操 作の介在に関わりなく、常にファイルの現時点での最後へと行われま す。

mode 文字列には、3 番目の文字として、または上で説明した 2 文字からなる文 字列の間に指定する文字として、文字 ‘‘b’’ を含めることができます。これは ISO/IEC 9899:1990 (‘‘ISO C89’’) との互換性を保つためのもので、効果はあり ません。 ‘‘b’’ は無視されます。

作成されたファイルのモードは、 "S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH" (0666) がプロセスの umask 値 ( umask(2) 参照) で修正さ れたものになります。

読み書きストリームでは、読込みと書込みをどのような順序でも混ぜることがで き、前バージョンの stdio のように、それらの間にシーク操作は必要ありませ ん。しかしながら、これは他のシステムへの移植性がありません。というのは、 ANSI C は、入力オペレーションがファイルの終了に達していない場合、ファイル 位置付け関数が出力と入力の間に介在することを要求しているからです。

fdopen() 関数は、既存のファイル記述子 fildes にストリームを関連付けます。 ストリームの mode には、ファイル記述子のモードとの互換性が必要です。 fclose(3) によってストリームが閉じられた時には、 fildes も閉じられます。

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 に設定することもあります。

fdopen() 関数は、エラーが発生すると、ルーチン fcntl(2) で規定されたエラー を errno に設定することもあります。

freopen() 関数は、エラーが発生すると、ルーチン open(2), fclose(3), fflush(3) で規定されたエラーを errno に設定することもあります。

関連項目

open(2), fclose(3), fileno(3), fseek(3), funopen(3)

規格

fopen() 関数と freopen() 関数は、 ISO/IEC 9899:1990 (‘‘ISO C89’’) に適合 しています。 fdopen() 関数は、 IEEE Std 1003.1-1988 (‘‘POSIX.1’’) に適合 しています。

FreeBSD 10.0 June 4, 1993 FreeBSD 10.0

スポンサーリンク