I-14-8. ファイル入出力とファイル/ディレクトリ操作

ファイル入出力、ファイル操作、ディレクトリ操作といったCプログラムからファイルにアクセスするファイル管理について説明する。またファイルに対する高水準ファイル入出力関数と低水準ファイル入出力があることを示し、具体的なデータ入出力方法を解説する。

【学習の要点】

* ファイルの入出力には、ファイル変数を使う。

* ディレクトリ操作をするには、direct.hに入っている標準関数を使う。

* 通常はシステムの頻繁な呼び出しを防ぐためバッファリングの仕組みを備える高水準ファイル入出力を用いる。

図I-14-8. ファイルアクセスの例

【解説】

1) ファイルの入出力

ファイルの入出力を行うには、以下のような手順が必要となる。

* ファイル変数を宣言する。

FILE *infile、*outfile;

* ファイルをオープンにする。

infile = fopen("infile.dat", "r"); //読み取りモードでオープン

outfile = fopen("outfile.dat", "w"); //書き込みモードでオープン

* ファイルを読み書きする。

fgets(str, sizeof(str), infile); //文字列変数strに1行読み込む場合

fputs(str, outfile); //文字列変数strの内容を書き込む場合

* ファイルをクローズする。

fclose(outfile);

fclose(infile);

2) ディレクトリ操作の方法

UNIX系OSでディレクトリを操作する関数には、次のようなものがある。

* mkdir() ディレクトリの作成

* rmdir() ディレクトリの削除

* opendir() ディレクトリのオープン

* readdir() オープンしたディレクトリのファイル一覧の取得

* closedir() ディレクトリのクローズ

3) 高水準ファイル入出力と低水準ファイル入出力の使い分け

一時的にデータをため込む領域のことを、バッファという。fopen()、fclose()などの高水準ファイル入出力関数はバッファを使用した入出力を行う。open()、close()などの低水準ファイル入出力関数ではバッファを使用しない。低水準ファイル入出力関数を利用すると、システムコールが頻繁に発生するので、通常は高水準ファイル入出力関数を利用する。

4) 具体的なファイル入力方法

ファイル入力例を図I-14-8に示す。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。