fopen、 fopen64、freopen、 freopen64、fopen_s または fdopen サブルーチン

目的

ストリームを開き、ランタイム制約違反を処理します。

ライブラリー

標準 C ライブラリー (libc.a)

構文

#include <stdio.h>
#define STDC_WANT_LIB_EXT1 1
FILE  *fopen ( Path Type)
const char *Path, *Type;

FILE  *fopen64 ( Path Type)
char  *Path, *Type;

FILE  *freopen (PathType Stream)
const char *Path, *Type;
FILE  *Stream;

FILE  *freopen64 (PathType Stream)
char  *Path, *Type;
FILE  *Stream;

FILE  *fdopen ( FileDescriptorType)
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 サブルーチンで指定する タイプ パラメーターのモード値は、ファイルが最初にオープンまたは作成されたときに指定されたファイルのモードと一致していなければなりません。

注: シャM_OPEN サブルーチンへの呼び出しから取得したファイル・ディスクリプターで FdOPEN サブルーチンを使用することは避ける必要があり、次の FREAD書き込み 、または フルーシュ 呼び出しでエラーが発生する可能性があります。

タイプ off_t のオブジェクトで正しく表現できる最大値は, オープン・ファイル記述のオフセット最大値として設定されます。

Fopen_ 秒 サブルーチンは、 ファイル名 パラメーターが指すストリングの名前を使用してファイルをオープンし、そのファイルにストリームを関連付けます。

ファイルは、排他的 (非共用とも呼ばれる) アクセスで書き込み用にオープンされます。 ファイルが作成され、 モード パラメーターの先頭文字が Uではなく、基礎となるシステムが排他モードの概念をサポートしている場合、ファイルには、システム上の他のユーザーがファイルにアクセスできないようにする許可があります。

ファイルが作成され、 モード パラメーターの先頭文字が Uの場合、ファイルは、ファイルがクローズされるまでシステム・デフォルトのファイル・アクセス許可を保持します。

ファイルが正常にオープンされると、 ストレンプトル パラメーターが指す ファイル 構造体へのポインターは、オープンされたファイルを制御するオブジェクトを指すポインターに設定されます。 それ以外の場合、 ストレンプトル パラメーターが指す ファイル 構造体へのポインターはヌル・ポインターに設定され、ファイルはファイルがクローズされるまでシステム・デフォルトのファイル・アクセス許可を保持します。

ランタイム制約

  1. Fopen_ 秒 サブルーチンの場合、 ストレンプトルファイル名 、または モード パラメーターは NULL ポインターであってはなりません。
  2. 実行時制約違反がある場合、 Fopen_ 秒 サブルーチンはファイルをオープンしようとしません。 ストレンプトル パラメーターが NULL ポインターでない場合、 Fopen_ 秒 サブルーチンは ストレンプトル パラメーターを NULL ポインターに設定します。

パラメーター

項目 説明
パス オープンされるファイルの名前が入っている文字ストリングを指します。
Type 以下のいずれかの値を持つ文字ストリングを指します。
r
テキスト・ファイルを読み取り用に開きます。
w
書き込み用の新規テキスト・ファイルを作成するか、ファイルを開いて 0 の長さに切り捨てます。
a
追加します (ファイルの末尾に書き込むテキスト・ファイルを開くか、書き込み用のファイルを作成します)。
rb
読み取りのためにバイナリー・ファイルを開きます。
wb
書き込み用のバイナリー・ファイルを作成するか、ファイルを開いて 0 に切り捨てます。
ab
追加します (ファイルの末尾に書き込むためにバイナリー・ファイルを開くか、書き込み用にファイルを作成します)。
r+
更新 (読み取りおよび書き込み) のためにファイルをオープンします。
w+
更新のためにファイルを切り捨てるか作成します。
a+
追加します (ファイルの終わりに書き込むためにテキスト・ファイルを開くか、書き込み用にファイルを作成します)。
R + B , RB +
更新 (読み取りおよび書き込み) のためにバイナリー・ファイルを開きます。
W + B , WB +
更新用のバイナリー・ファイルを作成するか、ファイルを開いて 0 の長さに切り捨てます。
A + B , AB +
追加します (更新のためにバイナリー・ファイルを開くか、ファイルの終わりに書き込むか、書き込みのためにファイルを作成します)。
WX
書き込み用のテキスト・ファイルを作成します。
Wbx
書き込み用のバイナリー・ファイルを作成します。
W + X
更新用のテキスト・ファイルを作成します。
w + bx または wb + x
更新用のバイナリー・ファイルを作成します。
注:
  • オペレーティング・システムは、テキスト・ファイルとバイナリー・ファイルを区別しません。
  • タイプ パラメーターの B 値は無視されます。
  • ファイルが既に存在するか作成できない場合、排他モード (モード引数の最後の文字がX ) でファイルを開くと失敗します。 それ以外の場合、基礎となるシステムが排他的アクセスをサポートしていれば、ファイルは排他的 (非共用とも呼ばれる) アクセスで作成されます。
  • FdOPEN サブルーチンは、排他モードには影響しません。
stream 入力ストリームを指定します。
FileDescriptor 有効なオープン・ファイル記述子を指定します。
ストレンプトル ファイル名に関連付けられているストリームを指定します。値を NULL にすることはできません。
ファイル名 オープンするファイル名を指定します。値をヌルにすることはできません。
モード 値を NULL にすることはできません。 mode パラメーターは、 FOPEN サブルーチンについて説明した タイプ パラメーターと同じですが、以下に示すように、文字 W または A で始まるモードの前に文字 U を付けることができます。
UW
0 に切り捨てられるか、書き込み用のテキスト・ファイルを作成し、デフォルトの許可を持ちます。
UWX
書き込み用のテキスト・ファイルを作成し、デフォルトの許可を持ちます。
ウクライナ
ファイルの末尾に書き込むテキスト・ファイルを開くか作成します。デフォルトのアクセス権があります。
UWB
0 に切り捨てられるか、書き込み用のバイナリー・ファイルを作成し、デフォルトの許可を持ちます。
UWBX
書き込み用のバイナリー・ファイルを作成し、デフォルトの許可を持ちます。
UAB
ファイルの末尾に書き込むためのバイナリー・ファイルを開くか作成します。このファイルには、デフォルトの許可があります。
UW +
0 に切り捨てられるか、更新用のテキスト・ファイルを作成し、デフォルトの許可を持ちます。
UW + X
更新用のテキスト・ファイルを作成し、デフォルトの許可を持ちます。
ua + 追加
ファイルの終わりで更新および書き込みを行うためのテキスト・ファイルを開くか、作成します。デフォルトの許可があります。
uw + b または uwb +
0 に切り捨てられるか、更新用のバイナリー・ファイルを作成し、デフォルトの許可を持ちます。
uw + bx または uwb + x
更新用のバイナリー・ファイルを作成し、デフォルトのアクセス権を持ちます。
ua + b または uab + append
ファイルの終わりで更新および書き込みを行うためにバイナリー・ファイルを開くか作成します。デフォルトの許可があります。
注: モード パラメーターの前に Uが付いていない場合、ファイル・アクセス権はユーザーのみです。

戻り値

FdOPENFOPENfopen64 フレオープン または freopen64 サブルーチンが失敗すると、NULL ポインターが戻され、エラーを示すために エラー番号 グローバル変数が設定されます。

Fopen_ 秒 サブルーチンは、ファイルをオープンするとゼロを戻します。 ファイルがオープンされていない場合、または実行時制約違反がある場合、 Fopen_ 秒 サブルーチンはゼロ以外の値を戻します。

エラー・コード

FOPENfopen64 フレオープン および freopen64 サブルーチンは、以下の条件が満たされている場合には失敗します。

項目 説明
EACCES パス接頭部のコンポーネントに対する検索許可が拒否されたか、ファイルが存在し、モードで指定された許可が拒否されたか、ファイルが存在せず、作成されるファイルの親ディレクトリーに対する書き込み許可が拒否されました。
ELOOP path の解析中に検出されたシンボリック・リンクが多すぎます。
EINTR プロセス中にシグナルを受信しました。
EISDIR 指定されたファイルはディレクトリーであり、プロセスにはそのファイルに対する書き込み権限がありません。
ENAMETOOLONG ファイル名の長さが 最大 PATH_MAX を超えているか、パス名コンポーネントが 最大名より長くなっています。
EMFILE 許可されている最大数のファイルが現在オープンされています。
ENOENT 指定されたファイルが存在しないか、 ファイル記述子 パラメーターが空ストリングを指しています。
ENOSPC ファイルはまだ作成されておらず、新規ファイルを入れるディレクトリーまたはファイル・システムを拡張することはできません。
ENOTDIR パス接頭部のコンポーネントがディレクトリーではありません。
ENXIO 指定されたファイルは文字特殊ファイルまたはブロック特殊ファイルであり, この特殊ファイルと関連した装置が存在していません。
EOVERFLOW 名前付きファイルは通常のファイルであり、ファイルのサイズは、off_t 型のオブジェクトでは正しく表すことができません。
EROFS 指定されたファイルは読み取り専用ファイル・システムにあり、書き込み権限を持っていません。
ETXTBSY ファイルは、実行中の純粋プロシージャー (共用テキスト) ファイルであり、プロセスに書き込みアクセス権がありません。

FdOPENFOPENfopen64 フレオープン および 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 つの標準テキスト・ストリームを含む) を同時に開くことができます。 バイナリー・モードとテキスト・モードの両方がサポートされます。