C言語 - 標準ライブラリ - stdio.h - fopen

クラウディア 
1. 概要
2. 書式
3. モード

1. 概要

 ファイルオープンざんす。

2. 書式


#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);

3. モード

 第2引数の「mode」は、以下の意味を持ちます。
 値   意味   備考 
r テキストファイルを読込み用にオープンします。
ストリームは、ファイルの最初に位置付けられます。
r+ 読込み用と書込み用にオープンします。
ストリームは、ファイルの最初に位置付けられます。
w 書込み用に、ファイルを長さ 0 に切りつめるか、テキストファイルを作成します。
ストリームは、ファイルの最初に位置付けられます。
w+ 読込み用と書込み用にオープンします。
ファイルが存在しない場合はそのファイルが作成され、存在する場合は切りつめられます。
ストリームは、ファイルの最初に位置付けられます。
a 書込み用にオープンします。
ファイルが存在しない場合はそのファイルが作成されます。ストリームは、ファイルの最後に位置付けられます。
それに続くファイルへの書き込みは、 fseek(3) のような操作の介在に関わりなく、常にファイルの現時点での最後へと行われます。
a+ 読込み用と書込み用にオープンします。
ファイルが存在しない場合はそのファイルが作成されます。
ストリームは、ファイルの最後に位置付けられます。
それに続くファイルへの書き込みは、 fseek(3) のような操作の介在に関わりなく、常にファイルの現時点での最後へと行われます。

 この他、「b」として、バイナリを意味するものがあったりします。
 これは、「VC」で「Windows」でコーディングする場合、特に意味があり、「b」がないとレコードの終わりに意図しない改行がついたりします。

 しかし、「Windows」以外の「clang」上だと例えば、マニュアルに下記のような注釈が付きます。

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