FILE *fp

.
Cプログラミング入門
.
(2014)
第14回
−ファイル入出力−
松田七美男
2014 年 7 月 17 日
ファイル入出力
1.
標準入出力を含めて,外部とのデータのやりと
りは
FILE 構造体
を通じて行うように定められている.実際に
は,FILE 構造体へのポインタを使う.
ファイル入出力
1.
標準入出力を含めて,外部とのデータのやりと
りは
FILE 構造体
を通じて行うように定められている.実際に
は,FILE 構造体へのポインタを使う.
2.
ファイル構造体 (へのポインタ) に関連する関数
fopen(), fclose()
fopen() の使い方
.
FILE *fp;
fp
= fopen(ファイル名, モード)
.
fopen() の使い方
.
FILE *fp;
fp
= fopen(ファイル名, モード)
.
ファイル名の指定:
直接記述:fopen("filename", ...)
ポインタ利用:fopen(fname, ...)
char *fname; char fname[80];
fopen() の使い方
.
FILE *fp;
fp
= fopen(ファイル名, モード)
.
ファイル名の指定:
直接記述:fopen("filename", ...)
ポインタ利用:fopen(fname, ...)
char *fname; char fname[80];
モード:
読み込み:"r","r+" 書き込み:"w","w+"
追記:"a","a+"
文字(列)入出力関数
.
オープンしたファイル(FILE 構造体へのポインタ
fp で識別)に対して,文字(列)を読み書きする関
数群がある.
.
文字(列)入出力関数
.
オープンしたファイル(FILE 構造体へのポインタ
fp で識別)に対して,文字(列)を読み書きする関
数群がある.
.
読み込み:fgetc(fp), getc(fp),
fgets(s,n,fp), ungetc(c,fp),
fscanf(fp, ...), fread(„,fp)
文字(列)入出力関数
.
オープンしたファイル(FILE 構造体へのポインタ
fp で識別)に対して,文字(列)を読み書きする関
数群がある.
.
読み込み:fgetc(fp), getc(fp),
fgets(s,n,fp), ungetc(c,fp),
fscanf(fp, ...), fread(„,fp)
書き込み:fputc(c,fp), putc(c,fp),
fputs(s,fp),
fprintf(fp,...), fwrite(„,fp)
オープンエラーへの対処
FILE *fp;
char *fin = "ファイル";
if ( (fp = fopen(fin, "r+") == NULL ) {
printf(“Can’t open %s\n”, fin);
exit(0);
}
.
オープンエラーへの対処
FILE *fp;
char *fin = "ファイル";
「"ファイル"が存在して,読み書き可能」ではない
if ( (fp = fopen(fin, "r+") == NULL ) {
printf(“Can’t open %s\n”, fin);
exit(0);
}
.
ファイルが適切にオープンできなかった場合には処理を
中止.
特に書き込みは絶対に避けるべき.
オープンエラーへの対処
FILE *fp;
char *fin = "ファイル";
「"ファイル"が存在して,読み書き可能」ではない
if ( (fp = fopen(fin, "r+") == NULL ) {
printf(“Can’t open %s\n”, fin);
exit(0);
}
.
ファイルが適切にオープンできなかった場合には処理を
中止.
特に書き込みは絶対に避けるべき.
データ喪失の可能性
à
ush(fp)
データの掃き出し:
.
出力のバッファリング
.
出力データはバッファリングされており,fprintf(), fputc()
などで出力させたつもりでも,実際にはデバイスに出力され
.ないことがある.
ush(fp)
データの掃き出し:
.
出力のバッファリング
.
出力データはバッファリングされており,fprintf(), fputc()
などで出力させたつもりでも,実際にはデバイスに出力され
.ないことがある.
à
fflush(fp) で強制的に掃き出す
.
ush(fp)
データの掃き出し:
.
出力のバッファリング
.
出力データはバッファリングされており,fprintf(), fputc()
などで出力させたつもりでも,実際にはデバイスに出力され
.ないことがある.
à
fflush(fp) で強制的に掃き出す
.
fp はファイルポインタあるいは標準出力
(. stdout)や標準エラー出力(stderr)
.