fread
提供: cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
| ヘッダ <stdio.h> で定義
|
||
size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); |
(C99未満) | |
size_t fread( void *restrict buffer, size_t size, size_t count, FILE *restrict stream ); |
(C99以上) | |
各オブジェクトに対して fgetc を size 回呼び、その結果を unsigned char の配列として再解釈された buffer の連続する位置に取得順に格納したかのように、指定された入力ストリーム stream から配列 buffer に最大 count 個のオブジェクトを読み込みます。 ストリームのファイル位置指示子は、読み込んだ文字数だけ進められます。
エラーが発生した場合、ストリームのファイル位置指示子の結果の値は不定になります。 要素が部分的に読み込まれた場合、その値は不定になります。
引数
| buffer | - | 読み込んだオブジェクトを格納する配列を指すポインタ |
| size | - | バイト単位の各オブジェクトのサイズ |
| count | - | 読み込むオブジェクトの数 |
| stream | - | 読み込むストリーム |
戻り値
読み込みに成功したオブジェクトの数。 エラーまたはファイル終端の状況が発生した場合は count より少なくなることがあります。
size または count がゼロの場合、 fread はゼロを返し、それ以外何の動作も行いません。
fread はファイル終端とエラーを区別しません。 呼び出し元はどちらが発生したかを調べるためには feof および ferror を使用しなければなりません。
例
Run this code
#include <stdio.h>
enum { SIZE = 5 };
int main(void)
{
double a[SIZE] = {1.,2.,3.,4.,5.};
FILE *fp = fopen("test.bin", "wb"); // must use binary mode
fwrite(a, sizeof *a, SIZE, fp); // writes an array of doubles
fclose(fp);
double b[SIZE];
fp = fopen("test.bin","rb");
size_t ret_code = fread(b, sizeof *b, SIZE, fp); // reads an array of doubles
if(ret_code == SIZE) {
puts("Array read successfully, contents: ");
for(int n = 0; n < SIZE; ++n) printf("%f ", b[n]);
putchar('\n');
} else { // error handling
if (feof(fp))
printf("Error reading test.bin: unexpected end of file\n");
else if (ferror(fp)) {
perror("Error reading test.bin");
}
}
fclose(fp);
}
出力:
Array read successfully, contents:
1.000000 2.000000 3.000000 4.000000 5.000000
参考文献
- C11 standard (ISO/IEC 9899:2011):
- 7.21.8.1 The fread function (p: 335)