next up previous contents
Next: 24. プリプロセッサ Up: 23. ファイル入出力 Previous: 5. その他

3. 課題 23

cd c を実行した後で( ~/c に移動した後で )、以下の課題を やってみよ。

課題 23.1

課題22.3 について、リストに対して typedef を用いて新しい型として定義し、 全てのソース中でこの新しい型を用いるようにソースを変更せよ。また、 動作を確認せよ。

課題 23.2
ファイルの読み込み

既存のファイル(kadai23_1.c)を読み込み専用にオープンし、全てのテキストを 読み込んだ後に、標準出力に再びそれらを出力せよ。

ヒント
malloc()を用いて、読み込んだ行を記憶させなければ ならない。更に、それらの行の管理のためにリンクドリストを使う必要がある。

課題 23.3
ファイルへの書き出し I

課題23.2を改良し、読み込んだテキストを別のファイル(kadai23_3.data)に 書き出すようにせよ。また、実行した結果、新しいファイル kadai23_3.data が作成されることを確認せよ。

課題 23.4
ファイルへの書き出し II

課題23.3 の読み込みファイルを変更し、kadai23_2.c を読み込むように せよ。これを実行した結果、前の kadai23_3.data の中身が新たに kadai23_2.cの中身に変わっていることを確認せよ。

課題 23.5
ファイルの読み書き

これまでの課題プログラムを利用して以下のプログラムを作成しなさい。 前のkadai23_3.dataの中身を画面に出力 した後に、kadai23_3.data のファイルの末尾に更に kadai23_4.c の 中身を追加するようなプログラムを作成せよ。

作成したプログラムをメイルで creport まで送りなさい。題は、kadai23 とする事。 但し、モジュール別に開発した場合には、それぞれのモジュールが 分かるようにして送りなさい。

前回の復習
新しい型の定義

新しい型を定義するには、以下のように行う。

    typedef [既存の型]  [新しい型の名前];
以降、この新しい型の名前は int,charなどと同じように使える。

ファイル入出力

ファイルの入出力は、ファイル型の構造体を元に行う。ファイル型構造体 へのポインタを用意しておかなければならない。

    FILE *fp;
実際の入出力に先立って、ファイルをオープンしなければならない。

    fp = fopen( "file_name", "mode" );
上の例で、file_name はパスを含めたファイル名で、mode はread, write, append の各モードに対して、"r", "w", "a" 等を指定する。更に、更新モードの場合にはそれぞれの指定 の後ろにr+ などのように + を付ける。

こうしてファイルをオープンした後は、fgets(), fputs(), fprintf() などの関数を利用して、読み書きが行える。

プログラムの終了時には、オープンしたファイルは自動的にクローズされる が、明示的に行うには、fclose(ファイル・ポインタ) を用いれば 良い。



Noriyo Kanayama 平成14年11月26日