標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C |
両方 |
#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() が filename と mode のストリングからファイル・タイプを判別する方法の詳細については、「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++ プログラミング・ガイド」を参照してください。
ファイル・モード
ファイル・モード | 機能説明 |
---|---|
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 | 書き込み用にテキスト・ファイルをオープンする。ファイルが既に存在すると、その内容は壊れます。 |
at | ファイルの終わりに書き込む付加モードで、テキスト・ファイルをオープンする。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() は、ファイルが存在しないときにはファイルを作成する。 |
バイナリー・ファイル には、一連の文字が含まれます。バイナリー・ファイルでは、システムは入力または出力の際に制御文字を変換 しません。z/OS® XL C/C++ では、一部のタイプのファイルは、テキスト・モードでオープンされたときでも、常に、バイナリー・ファイルとして扱われます。
そのような場合、制御文字はファイルへバイナリー・データとして書き込まれます。入力の際は、制御文字は、書き込みのとおりに読み戻されます。詳細については、「z/OS XL C/C++ プログラミング・ガイド」でバイト・ストリーム・モデルに関するトピックを参照してください。
z/OS XL C/C++ には、Record I/O および Blocked I/O というファイル拡張子があります。これらのファイルは実質的にバイナリーで (データ変換処理はありません)、追加の修飾子 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 が可能です。詳細は、z/OS XL C/C++ プログラミング・ガイドを参照してください。 |
acc=value | VSAM データ・セットのアクセス方向の標識。値 は fwd または bwd が可能。 |
acc=bwd | 最終レコードへのファイル位置標識を設定する。アクセス方向は、flocate() を呼び出して変更できる。 |
asis | ファイル名が大文字に変換されずに、そのまま使用されることを指定する。このオプションは、POSIX ではデフォルトである。また、HFS ファイル名でのデフォルトでもある (詳細は、「z/OS XL C/C++ プログラミング・ガイド」を参照のこと)。 |
blksize=value | レコードの物理ブロックの最大長をバイトで指定する。blksize パラメーターが有効で、かつ制限内であるかどうかをチェックするために、オープンしているファイルのタイプについて、「z/OS XL C/C++ プログラミング・ガイド」の該当するトピックを参照。 |
byteseek | バイナリー・ファイルに対してバイト・シークが可能であるかを表す標識。詳細は、ftell() および fseek() 関数を参照。 |
lrecl=value | 固定長レコードの長さと、可変長レコードの最大長を、バイトで指定する。lrecl パラメーターが有効で、かつ制限内であるかどうかをチェックするために、オープンしているファイルのタイプについて、「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() は、一般に、パラメーターが一致しないと失敗します。
⁄* 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");
}