fopen、 fopen64、freopen、 freopen64、fopen_s または fdopen サブルーチン
目的
ストリームを開き、ランタイム制約違反を処理します。
ライブラリー
標準 C ライブラリー (libc.a)
構文
#define STDC_WANT_LIB_EXT1 1
FILE *fopen ( Path, Type)
const char *Path, *Type;
FILE *fopen64 ( Path, Type)
char *Path, *Type;
FILE *freopen (Path, Type, Stream)
const char *Path, *Type;
FILE *Stream;
FILE *freopen64 (Path, Type, Stream)
char *Path, *Type;
FILE *Stream;
FILE *fdopen ( FileDescriptor, Type)
int FileDescriptor;
const char *Type;
errno_t fopen_s ( ストレンプトル, ファイル名, モード)
ファイル **ストレンプトル ;
const 文字 * ファイル名 ;
const 文字 * モード ;
説明
FOPEN および fopen64 サブルーチンは、 パス パラメーターで指定されたファイルを開き、それにストリームを関連付け、このストリームの ファイル 構造体へのポインターを返します。
更新のためにファイルをオープンすると、結果のストリームに対して入力操作と出力操作の両方を実行することができます。 ただし、出力命令の直後に、 フルーシュ サブルーチン呼び出しまたはファイル位置決め命令 (シーク、 フゼーコ、 fseeko64、 フセポス、 fsetpos64 、または 巻き戻し サブルーチン) を介在させずに入力命令を続けることはできません。 また、入力操作がファイルの終わりを検出しない限り、フラッシュまたはファイル位置決め操作を介在させずに、入力操作の直後に出力操作を続けることはできません。
追加のためにファイルを開く場合 (つまり、 タイプ パラメーターが Aに設定されている場合)、ファイル内の既存の情報を上書きすることはできません。
2 つの別個のプロセスが同じファイルを追加用にオープンした場合、各プロセスは、他のプロセスによって書き込まれる出力を破棄せずに、自由にファイルに書き込むことができます。 2 つのプロセスからの出力は、ファイルに書き込まれる順序で混在しています。
フレオープン および freopen64 サブルーチンは、まずストリームをフラッシュし、 ストリーム パラメーターに関連付けられたファイル記述子をクローズしようとします。 ストリームのフラッシュまたはファイル記述子のクローズの失敗は無視されます。
フレオープン および freopen64 サブルーチンは、指定されたファイルをオープン・ストリーム. の代わりに使用します。 後続のオープンが成功するかどうかに関係なく、元のストリームはクローズされます。 フレオープン および freopen64 サブルーチンは、 ストリーム パラメーターに関連した ファイル 構造体へのポインターを戻します。 フレオープン および freopen64 サブルーチンは、通常、標準入力 (標準入力)、標準出力 (標準出力)、および標準エラー (標準エラー出力) ストリームに関連した事前オープン・ストリームを他のファイルに付加するために使用されます。
FdOPEN サブルーチンは、 OpenX サブルーチン、 Dup サブルーチン、 クレート サブルーチン、または パイプ サブルーチンから取得したファイル・ディスクリプターにストリームを関連付けます。 これらのサブルーチンはファイルをオープンしますが、 ファイル 構造体へのポインターを戻しません。 標準入出力パッケージ・サブルーチンの多くは、 ファイル 構造体へのポインターを必要とします。
FdOPEN サブルーチンの タイプ パラメーターは、ストリームのモードを指定します。例えば、読み取りのためにファイルをオープンするには R 、追加のためにファイルをオープンする (ファイルの終わりに書き込む) には A などです。 FdOPEN サブルーチンで指定する タイプ パラメーターのモード値は、ファイルが最初にオープンまたは作成されたときに指定されたファイルのモードと一致していなければなりません。
タイプ off_t のオブジェクトで正しく表現できる最大値は, オープン・ファイル記述のオフセット最大値として設定されます。
Fopen_ 秒 サブルーチンは、 ファイル名 パラメーターが指すストリングの名前を使用してファイルをオープンし、そのファイルにストリームを関連付けます。
ファイルは、排他的 (非共用とも呼ばれる) アクセスで書き込み用にオープンされます。 ファイルが作成され、 モード パラメーターの先頭文字が Uではなく、基礎となるシステムが排他モードの概念をサポートしている場合、ファイルには、システム上の他のユーザーがファイルにアクセスできないようにする許可があります。
ファイルが作成され、 モード パラメーターの先頭文字が Uの場合、ファイルは、ファイルがクローズされるまでシステム・デフォルトのファイル・アクセス許可を保持します。
ファイルが正常にオープンされると、 ストレンプトル パラメーターが指す ファイル 構造体へのポインターは、オープンされたファイルを制御するオブジェクトを指すポインターに設定されます。 それ以外の場合、 ストレンプトル パラメーターが指す ファイル 構造体へのポインターはヌル・ポインターに設定され、ファイルはファイルがクローズされるまでシステム・デフォルトのファイル・アクセス許可を保持します。
ランタイム制約
- Fopen_ 秒 サブルーチンの場合、 ストレンプトル、 ファイル名 、または モード パラメーターは NULL ポインターであってはなりません。
- 実行時制約違反がある場合、 Fopen_ 秒 サブルーチンはファイルをオープンしようとしません。 ストレンプトル パラメーターが NULL ポインターでない場合、 Fopen_ 秒 サブルーチンは ストレンプトル パラメーターを NULL ポインターに設定します。
パラメーター
| 項目 | 説明 |
|---|---|
| パス | オープンされるファイルの名前が入っている文字ストリングを指します。 |
| Type | 以下のいずれかの値を持つ文字ストリングを指します。
注:
|
| stream | 入力ストリームを指定します。 |
| FileDescriptor | 有効なオープン・ファイル記述子を指定します。 |
| ストレンプトル | ファイル名に関連付けられているストリームを指定します。値を NULL にすることはできません。 |
| ファイル名 | オープンするファイル名を指定します。値をヌルにすることはできません。 |
| モード | 値を NULL にすることはできません。 mode パラメーターは、 FOPEN サブルーチンについて説明した タイプ パラメーターと同じですが、以下に示すように、文字 W または A で始まるモードの前に文字 U を付けることができます。
注: モード パラメーターの前に Uが付いていない場合、ファイル・アクセス権はユーザーのみです。
|
戻り値
FdOPEN、 FOPEN、 fopen64、 フレオープン または freopen64 サブルーチンが失敗すると、NULL ポインターが戻され、エラーを示すために エラー番号 グローバル変数が設定されます。
Fopen_ 秒 サブルーチンは、ファイルをオープンするとゼロを戻します。 ファイルがオープンされていない場合、または実行時制約違反がある場合、 Fopen_ 秒 サブルーチンはゼロ以外の値を戻します。
エラー・コード
FOPEN、 fopen64、 フレオープン および freopen64 サブルーチンは、以下の条件が満たされている場合には失敗します。
| 項目 | 説明 |
|---|---|
| EACCES | パス接頭部のコンポーネントに対する検索許可が拒否されたか、ファイルが存在し、モードで指定された許可が拒否されたか、ファイルが存在せず、作成されるファイルの親ディレクトリーに対する書き込み許可が拒否されました。 |
| ELOOP | path の解析中に検出されたシンボリック・リンクが多すぎます。 |
| EINTR | プロセス中にシグナルを受信しました。 |
| EISDIR | 指定されたファイルはディレクトリーであり、プロセスにはそのファイルに対する書き込み権限がありません。 |
| ENAMETOOLONG | ファイル名の長さが 最大 PATH_MAX を超えているか、パス名コンポーネントが 最大名より長くなっています。 |
| EMFILE | 許可されている最大数のファイルが現在オープンされています。 |
| ENOENT | 指定されたファイルが存在しないか、 ファイル記述子 パラメーターが空ストリングを指しています。 |
| ENOSPC | ファイルはまだ作成されておらず、新規ファイルを入れるディレクトリーまたはファイル・システムを拡張することはできません。 |
| ENOTDIR | パス接頭部のコンポーネントがディレクトリーではありません。 |
| ENXIO | 指定されたファイルは文字特殊ファイルまたはブロック特殊ファイルであり, この特殊ファイルと関連した装置が存在していません。 |
| EOVERFLOW | 名前付きファイルは通常のファイルであり、ファイルのサイズは、off_t 型のオブジェクトでは正しく表すことができません。 |
| EROFS | 指定されたファイルは読み取り専用ファイル・システムにあり、書き込み権限を持っていません。 |
| ETXTBSY | ファイルは、実行中の純粋プロシージャー (共用テキスト) ファイルであり、プロセスに書き込みアクセス権がありません。 |
FdOPEN、 FOPEN、 fopen64、 フレオープン および freopen64 サブルーチンは、以下の条件が満たされている場合には失敗します。
| 項目 | 説明 |
|---|---|
| EINVAL | タイプ 引数の値が有効ではありません。 |
| EINVAL | モード 引数の値が有効ではありません。 |
| EMFILE | 最大 FOPEN_MAX ストリームは現在、呼び出しプロセスでオープンしています。 |
| EMFILE | ストリーム最大値 ストリームは現在、呼び出しプロセスでオープンしています。 |
| ENAMETOOLONG | シンボリック・リンクのパス名の解決により、PATH_MAX を超える 長さの中間結果を作成しました。 |
| ENOMEM | 使用可能なストレージ・スペースが不十分です。 |
フレオープン および FOPEN サブルーチンは、以下の条件が満たされている場合には失敗します。
| 項目 | 説明 |
|---|---|
| EOVERFLOW | 指定されたファイルのサイズが 2 ギガバイトを超えています。 |
以下が真の場合、 FdOPEN サブルーチンは失敗します。
| 項目 | 説明 |
|---|---|
| EBADF | ファイル記述子 パラメーターの値が有効ではありません。 |
POSIX
| 項目 | 説明 |
|---|---|
| w | 長さを 0 に切り捨てるか、書き込み用のテキスト・ファイルを作成します。 |
| w+ | 長さを 0 に切り捨てるか、更新用のテキスト・ファイルを作成します。 |
| a | ファイルの終わりに書き込むためにテキスト・ファイルをオープンまたは作成します。 |
| a+ | 更新用のテキスト・ファイルをオープンまたは作成し、ファイルの終わりに書き込みます。 |
:NONE.
少なくとも 8 つのストリーム (3 つの標準テキスト・ストリームを含む) を同時に開くことができます。 バイナリー・モードとテキスト・モードの両方がサポートされます。