C言語でファイルに対して読み書きを行うためには,まずファイルをオープン (open) する必要があります.C言語でファイルをオープンするには stdio.h の fopen 関数を使用します.
#include <stdio.h>
FILE * fopen( const char * restrict filename, const char * restrict mode );
fopen 関数は filename で指定されたファイルをオープンし,そのファイルにストリーム (stream) を結び付ける関数です.なお,mode にはモード (オープンしたいファイルの種類や,データの読み書きの方法) を指定します.
fopen 関数はファイルのオープンに成功した場合は,オープンしたストリームを制御するオブジェクトへのポインタを返します.失敗した場合は,空ポインタ (NULL) を返します.
引数 mode に指定できるモードは以下の通りです.
モード | ファイル | 機能 | ファイルが ないとき |
---|---|---|---|
"r" | テキスト | 読み取り | エラー |
"w" | テキスト | 書き込み | 新規作成 |
"a" | テキスト | 追加書き込み | 新規作成 |
"rb" | バイナリ | 読み取り | エラー |
"wb" | バイナリ | 書き込み | 新規作成 |
"ab" | バイナリ | 追加書き込み | 新規作成 |
"r+" | テキスト | 更新(読み取り及び書込み) | エラー |
"w+" | テキスト | 更新(読み取り及び書込み) | 新規作成 |
"a+" | テキスト | 更新(追加書き込み) | 新規作成 |
"r+b" もしくは "rb+" | バイナリ | 更新(読み取り及び書き込み) | エラー |
"w+b" もしくは "wb+" | バイナリ | 更新(読み取り及び書き込み) | 新規作成 |
"a+b" もしくは "ab+" | バイナリ | 更新(追加書き込み) | 新規作成 |
fopen 関数を使用したファイルのオープンは多くの場合,以下のような書き方で実装されます.以下では例として sample.txt という名前のファイルを書き込みモードでオープンしています.
char *filename = "sample.txt";
FILE *fp;
/* ファイルのオープン */
if ((fp = fopen(filename, "w")) == NULL) {
/* エラー処理 */
}
...
/* ファイルのクローズ */
fclose(fp);
以下に fopen 関数を使用してファイルを書き込みモードでオープンするだけのシンプルなサンプルプログラムを示します.
/* header files */
#include <stdio.h>
#include <stdlib.h>
/* main */
int main(void) {
FILE *fp;
char *filename = "sample.txt";
/* ファイルのオープン */
if ((fp = fopen(filename, "w")) == NULL) {
fprintf(stderr, "%sのオープンに失敗しました.\n", filename);
exit(EXIT_FAILURE);
}
printf("ファイルのオープンに成功しました.\n");
printf("/*\n");
printf(" 普通はファイルに対して書き込みを行うコードを\n");
printf(" ここに書きます.\n");
printf("*/\n");
/* ファイルのクローズ */
fclose(fp);
return EXIT_SUCCESS;
}
サンプルプログラムの実行結果は以下のようになります.
ファイルのオープンに成功しました. /* 普通はファイルに対して書き込みを行うコードを ここに書きます. */
たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.
C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります.
オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.
ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.