C言語 - 標準ライブラリ - stdio.h - fread, fwrite
- 1. 概要
- 2. 書式
- 3. 戻り値
1. 概要
「fread」「fwrite」は、バイナリストリーム入出力を行う関数です。
「fread」が入力で、「fwrite」が出力なのは、英検5級でも理解できる話です。
2. 書式
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
「fread」は、「stream」が指すストリームから、それぞれが「size」バイトの大きさのオブジェクトを「nmemb」個読み込み、「ptr」で指定された場所に保存します。
「fwrite」は、「ptr」で指定された場所から、それぞれが「size」バイトの大きさのオブジェクトを「nmemb」個「stream」が指すストリームに書き込みます。
コンピュータは、馬鹿なので、実際の大きさや個数は知りません。
結局「大きさ×個数」分、読んだり書いたりします。
3. 戻り値
「fread」と「fwrite」は、読み書きしたバイト数だけストリームのファイル位置インジケータを進め、読み書きしたオブジェクト数を返します。
エラーが発生した場合、またはファイルの終了に達した場合は、指定したものより少ないオブジェクト数 (または 0) を返します。
「fread」は、ファイルの終了とエラーを区別しません。
ファイルの終了かエラーかを判断するためには、呼び出し側が「feof」と「ferror」を使用する必要があります。
「 fwrite」は、書き込みエラーが発生した場合に限って「nmemb」より少ない値を返します。
と、ここまでほぼ、どこかの丸写しなのですが、ここからが肝心。
少なくとも「fwrite」は、戻り値が、第3引数の「nmemb」の値と一致するかどうかで、正常に処理したかどうかを判定できます。
これは、覚えておいた方がいい。
|
|