نطاقات
المتغيرات
أفعال

fread

من cppreference.com
< c | io
<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)

تقرأ كحد أقصى عدد ‎count‎ من الكائنات من تيار الإدخال المعطى ‎stream‎ وتخزنها في المصفوفة ‎buffer‎ كما لو تم استدعاء fgetc‎ عدد ‎size‎ من المرات لكل كائن مع تخزين الناتج في مصفوفة عناصرها unsigned char. يتم تزويد علامة موضع الملف بعدد الحروف المقروءة.

عند حدوث خطأ, تكون علامة موضع الملف غير محدد القيمة. في حالة قراءة جزء من عنصر تكون قيمته غير محددة.

المعطيات

buffer - مؤشر إلى مصفوفة سيتم تخزين الكائنات المقروءة فيه
size - حجم كل كائن بالبايت
count - عدد الكائنات التي سيتم قراءتها
stream - تيار البيانات المراد القراءة منه

القيمة المُرجعة

عدد الكائنات التي نجحت عملية قراءتها. ربما تكون القيمة أقل من ‎count‎ في حالة حدث خطأ أو انتهاء الملف قبل الأوان.

إذا كانت ‎size‎ أو ‎count‎ بصفر, تكون المُرجعة صفر ولا يتم إجراء أي عمليات.

مثال

#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");
       }
    }
}

الخرج:

1.000000 2.000000 3.000000 4.000000 5.000000

أنظر أيضا

تقرأ مدخل منسق من stdin‎ أو تيار ملف (FILE*‎) أو مصفوفة
(دالة) [edit]
تقرأ سلسلة من الحروف من تيار ملف
(دالة) [edit]
تكتب في ملف
(دالة) [edit]