リスト1や2のプログラムの中で,これらの約束事の記述 の例を図2に示す.人間の動作を考えれば,取 り立ててその流れは難しくない.
図2を見て分かるように,実際のC言語ではオープン と読み書き,クローズの他に,ファイルポインターの宣言が必要であ る.ファイルポインターについては,次の節で述べることにする.C言語のプログラムで ファイル処理をする場合は,図3に示す手順に従えば良い. ただし,実際のプログラムではエラー処理を書かなくてはならないが,ここでは示してい ない.
このファイルポインター(fp)を使って,全てのファイル関係の処理を行う.なにせ, ファイルに関する情報が全て書かれているので,これを指定すれば,あとはコンピューター が勝手に処理してくれる.面倒くさい処理はコンピューター任せにして,プログラマーは 楽をしようということである.このFILE型の変数(ポインター)を使うためには,次 のように宣言する.
FILE *foo;これで,FILE型の変数(ポインター)fooを宣言できる.ただし,ここのfooは変数名なので プログラマーが適当な名前をつけることができる.FILE *hogeでもよい.
FILE *fopen(char *filename, char *openmode)戻り値はFILE型のポインター,ファイル名を表す第一引数はchar型のポインター,オープ ンモードを表す第2引数はchar型のポインターと言うことである.もし,オープンに失敗 すると,NULLという戻り値になる.char型のポインターと難しいことを言っているが, 先のプログラムの例(リスト1, 2)でも分かるように,文 字列をダブルクォーテーションで囲めば良いのである.例えば,hoge.txtというファイル を読み込みモードでオープンする場合
foo=fopen("hoge.txt", "r");
オープンモードについては,いろいろ用意されており,教科書のp.382にまとめてある. 細かいファイル処理をする場合は,これらのモードを巧みに使う必要があるが,本講義で は,
int fclose(FILE *filepointer)戻り値は,int型で,クローズに成功すると0,失敗するとEOFが返される.引数は,ファ イルポインターのみである.ファイルを開いたら閉じるのが礼儀だと心得て,処理の最後 に
fclose(foo);と必ず書く.
となる.ファイルポインターを指定する以外,すべて標準入力の場合と同じである.非常 に単純で簡単である.実際の動作もキーボードからデータを入力するのも,ファイルから 読み込むのも同じイメージで取り扱える.戻り値の整数は入力したデータの個数である. もし,ファイルの最後あるいは読み込みに失敗するとEOFを返す.
ファイル入力 int fscanf(ファイルポインター,書式指定,引数並び) 標準入力 int scanf(書式指定,引数並び)
となる.ハードディスクのファイルにデータを書き込むのは,ディスプレイにデータを出 力するのと全く同じイメージである.実際,ファイル出力されたデータを見ると,ディス プレイと同じであることが分かる.戻り値の整数は出力した文字数である.書き込みに失 敗すると負の値を返す.
ファイル出力 int fprintf(ファイルポインター ,書式指定,引数並び) 標準出力 int printf(書式指定,引数並び)
これまでから,コンソール入出力とファイル入出力は同じ取り扱いができることが理解で きたであろう.