fread()は、ストリームからバイナリデータをプログラムに読み込みます。
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
ptrは読み込んだデータを保存するためのバッファのポインタ、sizeは読み込むデータ1個の長さ、 nmembは読み込むデータ数、streamは読み込むストリームのポインタです。streamはには一般的には、fopen()が返した値を指定します。
fread()は、読み込んだデータ数を返します。読み込んだデータ数がnmembより少ない時には、実際に読み込んだデータ数が、 エラーが発生したときには0が返されます。
次の例は、fwrite()とfread()を使ってファイルにアクセスするプログラムの例です。
#include <stdio.h>
#ifdef _MSC_VER
#pragma warning(disable :4996)
#endif
#define INFNAME "./test.dat"
#define OUTFNAME "./test.out"
#define DATA_LEN 6
int main(int argc, char* argv[])
{
FILE* stream;
char buff[256];
size_t n;
if ((stream = fopen(INFNAME, "r")) == NULL)
{
printf("入力ファイルを開くことができません.\n");
return;
}
// 1バイトのデータを6個読み込む
n = fread(buff, sizeof(char), (size_t)DATA_LEN, stream);
if (n != 6)
{
printf("正しく読み出せませんでした.\n");
fclose(stream);
return;
}
else
buff[n] = 0;
printf("データ=%s\n", buff);
fclose(stream);
if ((stream = fopen(OUTFNAME, "w")) == NULL)
{
printf("出力ファイルを開くことができません.\n");
return;
}
// ストリームにデータを書き込む
if (fwrite(buff, sizeof(char), (size_t)DATA_LEN, stream) != 6)
{
printf("すべてのデータを書き込めませんでした.\n");
}
fclose(stream);
return 0;
}