Linux講座にようこそ。このページは「C言語プログラミング入門 - 第14章.ライブラリ関数 - 入出力ライブラリ」講座です。
fopen関数はファイルの入出力を行うための準備(オープン)を行ないます。また、入出力完了後はfclose関数で後処理(クローズ)が必要です。従って、fopen関数とfclose関数はペアで使用します。
形式 | #include <stdio.h> FILE *fopen(const char *file_path, const char *io_mode); |
---|---|
返り値 | ファイルのオープンが出来た場合はファイルポインタを返し、出来なかった場合はNULLポインタを返します。 |
引数 |
|
使用法、 他 |
返り値がNULLポインタ以外の場合はファイルのオープンが出来ましたので、ファイルポインタを保存しておき、以降の処理でファイルポインタを使用して入出力を行ないます。 返り値がNULLポインタの場合はファイルのオープンが出来ていませんので、通常はエラー処理を行いプログラムを終了します。 |
モード | 意味 |
---|---|
"r" | 既存ファイルを読み出し専用でオープンします。 |
"w" | 新規あるいは、既存ファイルを書き込み専用でオープンします。既存ファイルの場合は上書きとなります。 |
"a" | 新規あるいは、既存ファイルを書き込み専用でオープンします。既存ファイルの場合はファイルの末尾に追加書きとなります。 |
"r+" | 既存ファイルを更新用(読み出し、書き込みの両方)でオープンします。 |
"w+" | 新規あるいは、既存ファイルを更新用でオープンします。既存ファイルの場合は上書きとなります。 |
"a+" | 新規あるいは、既存ファイルを更新用でオープンします。既存ファイルの場合はファイルの末尾に追加書きとなります。 |
fclose関数はファイル入出力の後処理(クローズ)を行ないます。プログラムの実行終了時にオープンしたままのファイルがあると、自動的にクローズしますので、クローズしなくても多くの場合は問題ありません。ただし、同時にオープンできるファイルの数には制限がありますので、多くのファイルを取り扱う場合には、オープンしたファイルをクローズして、別のファイルをオープンするといった様なことを行う必要があります。また、プログラミングスタイルとして、オープンしたファイルは明示的にクローズするようにした方が良いでしょう。
形式 | #include <stdio.h> int fclose(FILE *fp); |
---|---|
返り値 | ファイルのクローズが出来た場合は0を返し、出来なかった場合はEOFを返します。 |
引数 |
|
fflush関数はバッファに保持されている出力データをファイルに出力します。バッファが満杯になったり、fclose関数が実行されるとバッファの内容はファイルに出力されますので、通常はfflush関数を使う必要はありません。ただし、長時間実行するプログラムでログファイルなどを出力し続ける場合は、一定時間経過したら、強制的にバッファの内容を出力するといったことが必要かもしれません。
fflush関数実行後もファイルはオープンしたままですので、引き続き入出力は行えます。
形式 | #include <stdio.h> int fflush(FILE *fp); |
---|---|
返り値 | 正常に出力できた場合は0を返し、出来なかった場合はEOFを返します。 |
引数 |
|
freopen関数は次のことを行ないます。
freopen関数は予め用意されているファイルポインタ(stdin、stdout、stderr等)を、一般ファイル用に使いたいときなどに使うようです。
形式 | #include <stdio.h> FILE *freopen(const char *file_path, const char *io_mode, FILE *fp); |
---|---|
返り値 | 第1引数のfile_pathで指定したファイルが正常にオープンできた場合はfile_pathのファイルポインタを返し、オープンできなかった場合はNULLポインタを返します。 |
引数 |
|
カレントディレクトリの下にあるtemp.txtファイルのオープンとクローズを行ないます。fopen関数とfclose関数の使用法を説明するだけのプログラムですので、実用性はまったくありません。
$ ls -l temp.txt ← temp.txtファイルの確認です ls: cannot access temp.txt: そのようなファイルやディレクトリはありません $ ./ex14_1_1.prg ← temp.txtファイルは有りませんのでオープンは失敗します temp.txtファイルのオープンは失敗しました $ echo $? 1 $ $ cat > temp.txt ← temp.txtファイルを作成します Hello World!!. $ ls -l temp.txt ← temp.txtファイルの確認です -rw-r--r-- 1 merry users 15 2007-12-06 10:43 temp.txt $ ./ex14_1_1.prg temp.txtファイルのオープンは成功しました temp.txtファイルのクローズは成功しました $ echo $? 0 $