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」の値と一致するかどうかで、正常に処理したかどうかを判定できます。  これは、覚えておいた方がいい。