■ファイル入出力

Last modified: Sun May 5 2024
このページは,基礎工学部システム科学科機械科学コース2年生向けの 「情報科学演習」における演習2の教材の1つです.

●考え方

Cの標準ライブラリを通じてファイルの入出力を行う場合は, ハードウェアの実態を意識せずに, 以下のイラストのような抽象的なイメージで取り扱うことができる.

Cの標準ライブラリでは, ファイルの入出力をstdio.hの中で定義されているFILE型へのポインタを目印にして行う. そこで,

    FILE *fp1, *fp2;
というようなポインタ変数の用意し,fp1やfp2という変数(の中身)で, 入出力の相手を区別する.

ファイルに対して入出力を行うには,必ず最初にファイルを「オープン」し, 書いたり読んだりが終わったら,必ず「クローズ」する必要がある. それを行うのが標準ライブラリの中の関数 fopenとfcloseである. fopenはオープンの処理が成功すると, そのファイルに対するファイルポインタを返してくれる.

実は,標準ライブラリには, fopenしなくても最初から使えるようになっているファイルポインタが3つ用意されており, stdin, stdout, stderrという名前で宣言されている. それぞれ,「標準入力」「標準出力」「標準エラー出力」と呼ばれている. これらは,デフォルトでは,stdinはキーボードに, stdoutとstderrは画面に割り付けられている.キーボードからの文字入力や, 画面への文字出力も, ファイルに対する入出力と同じ手続きで行えるように仕組まれている.

●重要な関数

Cの標準ライブラリの中のファイル入出力関係の重要な関数を挙げる.

fopen(filename, mode)
filename: ファイル名を表す文字列
mode: ファイルに対する操作の種類を区別する文字列

ファイル名で指定されるファイルに対して入出力できるように準備する.
モードの基本は,"r"(読み込み)か"w"(書出し).
返り値は,ファイルポインタ(入出力の相手を区別する目印).
これがNULL(特殊なポインタ値)の場合は,処理に失敗を意味する.

fclose(fp)
fp: ファイルポインタ

ファイルの後始末.

fprintf(fp, format, ...)
fp: ファイルポインタ
format: 書式文字列

printfのファイル版.
書式文字列以降の使い方はprintfと全く同じ

fscanf(fp, format, ...)
fp: ファイルポインタ
format: 書式文字列

scanfのファイル版.あまり使うべきではない.

fgets(str, num, fp)
str: 文字配列
num: 配列要素数
fp: ファイルポインタ

文字配列に1行分(改行文字も含む)の文字を読み込む.
返り値は,文字配列を指すポインタ.
これがNULLだとファイルの終りを意味する.
用意した配列の大きさをオーバしないように要素数を与える.
最大文字数はnum-1.残り1は'\0'の分.

sscanf(str, format, ...)
str: 文字配列
format: 書式文字列

scanfの文字列版. 文字配列strを先頭から走査し,書式文字列で指定された内容を読み取り, それぞれの型に変換する.
返り値は読み込みに成功した項目数.

fputs(str, fp)
str: 文字配列
fp: ファイルポインタ

文字配列の内容をfpで示されるファイルに書く.

fputc(c, fp)
c: 文字を表す整数値(int型)
fp: ファイルポインタ
fgetc(fp)
fp: ファイルポインタ

この演習では積極的には取り上げないが, ファイルに対する読み書きの基本となる関数がこの2つである. fputcは1文字書く.fgetcは1文字読む. 文字列単位の操作を行う関数は,全てこれらの関数でできている.

●ごく基本的な例

例2-1 example21.c

例2-2 example22.c

例2-3 example23.c

fgetsの働き


[演習2のインデックス] [前の教材(OSとCの標準ライブラリ)] [次の教材(ファイル入出力2(実用編))]