fopen() - ファイルのオープン
規格
標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C
POSIX.1 XPG4 XPG4.2 C99 Single UNIX Specification、バージョン 3 |
both |
Format
#include <stdio.h>
FILE *fopen(const char *__restrict__filename, const char *__restrict__mode);
機能説明
fopen() 関数は、filename で指定されたファイルをオープンし、ストリームをそれに関連付けます。 mode 変数は、ファイルに要求されたアクセス・タイプを指定する文字ストリングです。 mode 変数には、オプションのキーワード・パラメーターが後に続く、位置パラメーターが 1 つ含まれます。 定位置パラメーターは、 表 1 および 表 2で説明されています。
位置パラメーターは小文字で受け渡されなければなりません。
キーワード・パラメーターは大文字小文字が混在していても構いません。 それらはコンマで区切られなければなりません。 キーワードのインスタンスは 1 つだけ指定できます。
fopen() に渡すファイル名により、通常、オープンされるファイルの タイプが判別されます。 ファイルの命名規則が存在します。それらによって、特に MVS™ と HFS ファイルの両方を参照するアプリケーションを作成するこ とができます。 fopen() が ファイル名 および モード ストリングからファイルのタイプを判別する方法について詳しくは、 z/OS XL C/C++ プログラミング・ガイドでのファイルのオープンに関するトピックを参照してください。
z/OS® UNIX の大規模ファイルのサポート: AMODE 64 C/C++ アプリケーションの場合は、z/OS UNIX の大規模ファイルが自動的にサポートされます。 AMODE 31 C/C++ アプリケーションは、オプション LANGLVL(LONGLONG) を指定してコンパイルされなければなりません。また、ヘッダーがインクルードされる前に _LARGE_FILES フィーチャー・テスト・マクロを定義して、2 GB のサイズより大きい z/OS UNIX ファイルをこの関数が操作できるようにしなければなりません。 ファイル・サイズとオフセット・フィールドは、63 ビットの幅に拡張されます。 したがって、_LARGE_FILES フィーチャー・テスト・マクロの定義も行うには、ファイルを操作する他のいずれかの関数が必要です。
マルチスレッド環境の名前付きパイプ: fopen() を使用して、マルチスレッド環境で名前付きパイプをオープンしないでください。 使用した場合、デッドロックが起こる可能性があります。 詳細な説明については、 z/OS XL C/C++ プログラミング・ガイド を参照してください。
ファイル・モード
t
を含むモード・パラメーター、例えば、rt
、
rt+
、r+t
、wt
、wt+
、w+t
、
at
、at+
、または a+t
を指定すると、
fopen() 要求は、無効なモードが指定されたことを示すメッセージを出して失敗します。
ファイル・モード | 機能説明 |
---|---|
r | 読み取り用にテキスト・ファイルをオープンする (ファイルは必ず存在しなければならない)。 |
w | 書き込み用にテキスト・ファイルをオープンする。 w モードが、DISP=MOD を指定した ddname に指定されると、動作は a が指定された場合と同じになります。 その他の場合は、ファイルが既に存在すると、その内容は壊れます。 |
a | テキスト・ファイルを追加モードで開いて、ファイルの末尾に書き込みます。 fopen() は、ファイルが存在しない場合はファイルを作成します。 |
r+ | 読み取りおよび書き込み用にテキスト・ファイルをオープンする。 (ファイルは必ず存在しなければならない)。 |
w+ | 読み取りおよび書き込み用にテキスト・ファイルをオープンする。 w+ モードが、DISP=MOD を指定した ddname に指定されると、動作は a+ が指定された場合と同じになります。 その他の場合は、ファイルが既に存在すると、その内容は壊れます。 |
a+ | ファイルの末尾にある読み取りまたは更新のために、テキスト・ファイルを追加モードで開きます。 fopen() は、ファイルが存在しない場合はファイルを作成します。 |
rb | 読み取り用にバイナリー・ファイルをオープンする (ファイルは必ず存在しなければならない)。 |
wb | 書き込み用に空のバイナリー・ファイルをオープンする。 wb モードが、DISP=MOD を指定した ddname に指定されると、動作は ab が指定された場合と同じになります。 その他の場合は、ファイルが既に存在すると、その内容は壊れます。 |
ab | バイナリー・ファイルを追加モードでオープンし、ファイルの末尾に書き込みます。 fopen() は、ファイルが存在しない場合はファイルを作成します。 |
rt | 読み取り用にテキスト・ファイルをオープンする (ファイルは必ず存在しなければならない)。 |
wt | 書き込み用にテキスト・ファイルをオープンする。 ファイルが既に存在すると、その内容は壊れます。 |
オープンされた場所: | テキスト・ファイルを追加モードで開いて、ファイルの末尾に書き込みます。 fopen() は、ファイルが存在しない場合はファイルを作成します。 |
r+b または rb+ | 読み取りおよび書き込み用にバイナリー・ファイルをオープンする (ファイルは必ず存在しなければならない)。 |
w+b または wb+ | 読み取りおよび書き込み用に空のバイナリー・ファイルをオープンする。 w+b (または wb+ ) モードが、DISP=MOD を指定した ddname に指定されると、動作は ab+ が指定された場合と同じになります。 その他の場合は、ファイルが既に存在すると、その内容は壊れます。 |
a+b または ab+ | ファイルの末尾にある読み取りまたは更新のために、バイナリー・ファイルを追加モードで開きます。 fopen() は、ファイルが存在しない場合はファイルを作成します。 |
r+t または rt+ | 読み取りおよび書き込み用にテキスト・ファイルをオープンする。 (ファイルは必ず存在しなければならない)。 |
w+t または wt+ | 読み取りおよび書き込み用にテキスト・ファイルをオープンする。 ファイルが既に存在すると、その内容は壊れます。 |
a+t または at+ | ファイルの末尾にある読み取りまたは更新のために、テキスト・ファイルを追加モードで開きます。 fopen() は、ファイルが存在しない場合はファイルを作成します。 |
w
、w+
、wb
、w+b
、および wb+
パラメーターを使用する場合は注意
が必要です。同じ名前の既存ファイルにあるデータは失われます。\r
は、 \n
(改行) が書き込まれた場合と同様に処理されます。バイナリー・ファイル には、一連の文字が含まれます。 バイナリー・ファイルでは、システムは入力または出力の際に制御文字を変換 しません。 z/OS XL C/C++では、一部のタイプのファイルは、テキスト・モードで開かれている場合でも、常にバイナリー・ファイルとして扱われます。
そのような場合、制御文字はファイルへバイナリー・データとして書き込まれます。 入力の際は、制御文字は、書き込みのとおりに読み戻されます。 詳細については、 z/OS XL C/C++ プログラミング・ガイド のバイト・ストリーム・モデルに関するトピックを参照してください。
z/OS XL C/C++ has レコード入出力 and ブロック入出力 file extensions. これらのファイルは実質的にバイナリーで (データ変換処理はありません)、追加の修飾子 type=record
および type=blocked
を必要とします。 詳細については、 z/OS XL C/C++ プログラミング・ガイド にある入出力ファイルへの書き込みおよびブロック入出力ファイルへの書き込みに関するトピックを参照してください。
ファイルを a
、a+
、ab
、a+b
、または ab+
モードでオープンす
るとき、すべての書き込み操作はファイルの終わりで行われます。 fseek()、fsetpos()、または rewind() を使用してファイル・
ポインターの位置を変更できますが、書き込み関数は、出力操作を実行する前
に、ファイル・ポインターをファイルの終わりに移動し直します。 このアクションは、既存データへの上書きを防ぐためのものです。
更新モード (2 または 3 番目の位置に +
を使用して) を指定す
る場合は、ファイルの読み書き両方ができます。 ただし、読み取りと書き込みを切り替えるときは、 fseek()、 fsetpos()、 rewind() 、または fflush() などの間に位置決め関数を含める必要があります。 EOF が検出された場合、出力は入力の直後になります。
パラメーター | 説明 |
---|---|
abend= value |
オープンされるストリームに対して OS 入出力操作時に発行される異常終了から、ランタイム・ライブラリーがリカバリーしようとするかどうかを制御します。 value は、abend または recover が可能です。 See z/OS XL C/C++ プログラミング・ガイド for more information. |
acc= value |
VSAM データ・セットのアクセス方向の標識。 値 は fwd または bwd が可能。 |
acc=bwd |
最終レコードへのファイル位置標識を設定する。 アクセス方向は、flocate() を呼び出して変更できる。 |
asis
|
ファイル名が大文字に変換されずに、そのまま使用されることを指定する。 このオプションは、POSIX ではデフォルトである。 It is also the default for HFS file names (see z/OS XL C/C++ プログラミング・ガイド for more information). |
blksize= value |
レコードの物理ブロックの最大長をバイトで指定する。 blksize を パラメーターが有効で、その限界内にあるかどうかを確認するには、開いているファイルのタイプについて、 z/OS XL C/C++ プログラミング・ガイド の該当するトピックを参照してください。 |
byteseek
|
バイナリー・ファイルに対してバイト・シークが可能であるかを表す標識。 詳細は、ftell() および fseek() 関数を参照。 |
lrecl= value |
固定長レコードの長さと、可変長レコードの最大長を、バイトで指定する。 ラクル パラメーターが有効で、その限界内にあるかどうかを確認するには、開いているファイルのタイプについて、 z/OS XL C/C++ プログラミング・ガイド の該当するトピックを参照してください。 |
noseek |
ストリームが位置変更関数を一切使用していないことを示す。 これによってパフォーマンスが改善できる。 |
password= xxxxxxx |
VSAM データ・セットにパスワードを指定する。 |
recfm=A |
ASA 印刷制御文字。 |
recfm=F |
固定長、非ブロック化。 |
recfm=FA |
固定長、ASA 印刷制御文字。 |
recfm=FB |
固定長、ブロック化。 |
recfm=FM |
固定長、マシン印刷制御コード。 |
recfm=FS |
固定長、非ブロック化、標準。 |
recfm=FBA |
固定長、ブロック化、ASA 印刷制御文字。 |
recfm=FBM |
固定長、ブロック化、マシン印刷制御コード。 |
recfm=FBS |
固定長、非ブロック化、標準、ASA 印刷制御文字。 |
recfm=FSA |
固定長、非ブロック化、標準、ASA 印刷制御文字。 |
recfm=FSM |
固定長、非ブロック化、標準、マシン印刷制御コード。 |
recfm=FBSA |
固定長、ブロック化、標準、ASA 印刷制御文字。 |
recfm=FBSM |
固定長、ブロック化、標準、マシン印刷制御コード。 |
recfm=U |
未定義長。 |
recfm=UA |
未定義長、ASA 印刷制御文字。 |
recfm=UM |
未定義長、マシン印刷制御コード。 |
recfm=V |
可変長、非ブロック化。 |
recfm=VA |
可変長、ASA 印刷制御文字。 |
recfm=VB |
可変長、ブロック化。 |
recfm=VM |
可変長、マシン印刷制御コード。 |
recfm=VS |
可変長、非ブロック化、スパン。 |
recfm=VBA |
可変長、ブロック化、ASA 印刷制御文字。 |
recfm=VBM |
可変長、ブロック化、マシン印刷制御コード。 |
recfm=VBS |
可変長、ブロック化、スパン。 |
recfm=VSA |
可変長、非ブロック化、スパン、ASA 印刷制御文字。 |
recfm=VSM |
可変長、非ブロック化、スパン、マシン印刷制御コード。 |
recfm=VBSA |
可変長、ブロック化、スパン、ASA 印刷制御文字。 |
recfm=VBSM |
可変長、ブロック化、スパン、マシン印刷制御コード。 |
recfm=* |
ファイルが書き込みモードでオープンされると、既存のファイル属性が使用される。 注: 既存の DASD データ・セットにのみ
recfm=* の使用が有効。 その他すべての場合は無視される。 |
recfm=+ |
以下の例外を除いて、recfm=* と同一。
|
samethread |
このパラメーターは、ストリームに対する入出力操作が、ストリームがオープンされたスレッドに限定されることを指定する。 ライブラリーは、マルチスレッド環境では、ストリームをロックしない。 このキーワードを使用すると、このストリームが他のスレッドでアクセスされる必要がないときに、パフォーマンスが改善できる。 |
space | Space 属性は MVS データ・セット用。 パラメーター内に、埋め込まれたブランクを入れることはできない。 説明:
このパラメーターの構文について詳しくは、 z/OS XL C/C++ プログラミング・ガイド 」の fopen() パラメーターおよび freopen() パラメーターに関するトピックを参照してください。 |
type=blocked |
このパラメーターは、順次ブロック入出力のためにファイルをオープンすることを指定します。 ファイルはバイナリー・ファイルとして開く必要があります。そうでない場合、 fopen() は失敗します。 読み取り操作と書き込み操作は、fread() と fwrite() によって行う。 |
type=memory |
このパラメーターは、C プログラムからのみアクセスできるメモリー・フ ァイルとして、このファイルを識別する。 |
type=memory
(hiperspace)
|
MVS/ESA を使用している場合、HIPERSPACE サブオプションを使用して、ハイパースペース・メモリー・ファイルをオープンすることができる。 制限: AMODE 64 アプリケーションの場合、
type=memory(hiperspace) は type=memory と
して扱われる。
|
type=record |
このパラメーターは、順次レコード入出力のためにファイルをオープンすることを指定します。 ファイルはバイナリー・ファイルとして開く必要があります。そうでない場合、 fopen() は失敗します。 読み取り操作と書き込み操作は、fread() と fwrite() によって行う。 VSAM クラスターにアクセスする場合、これが fopen() のデフォルト・ モードである。 |
戻り値
正常に実行された場合、fopen() は、関連ストリームを制御するオブジェクトへのポインターを戻します。
正常に実行されなかった場合、fopen() は NULL ポインターを戻します。
fopen() は、一般に、パラメーターが一致しないと失敗します。
- エラー・コード
- 説明
- EOVERFLOW
- 名前付きファイルは通常のファイルであり、ファイルのサイズは、
off_t
型のオブジェクトでは正しく表すことができません。
例
/* CELEBF26
This example attempts to open two files for reading, myfile.dat
and myfile2.dat.
*/
#include <stdio.h>
int main(void)
{
FILE *stream;
/* The following call opens a text file for reading */
if ((stream = fopen("myfile.dat", "r")) == NULL)
printf("Could not open data file for reading\n");
/* The following call opens:
the file myfile2.dat,
a binary file for reading and writing,
whose record length is 80 bytes,
and maximum length of a physical block is 240 bytes,
fixed-length, blocked record format
for sequential record I/O.
*/
if ( (stream = fopen("myfile2.dat", "rb+, lrecl=80,\
blksize=240, recfm=fb, type=record")) == NULL )
printf("Could not open data file for read update\n");
}
関連情報
- z/OS XL C/C++ プログラミング・ガイドでの入出力の処理に関するトピックを参照してください。
- stdio.h — 標準入出力
- fclose() - ファイルのクローズ
- fldata() - ファイル情報の検索
- freopen() - オープン・ファイルの宛先変更