Spec-Zone.ru › C

fread

Defined in header <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 объектов в массив buffer из заданного входного потока stream, как если бы вызывался fgetc size раз для каждого объекта и сохранял результаты в порядке получения в последующие позиции buffer, который переинтерпретируется как массив unsigned char. Указатель позиции файла для потока продвинут на количество прочитанных символов.

Если произошла ошибка, результирующее значение указателя позиции файла для потока неопределено. Если считывается частичный элемент, его значение неопределено.

Параметры

buffer - указатель на массив, где хранятся считанные объекты
size - размер каждого объекта в байтах
count - количество объектов для чтения
stream - поток для чтения

Возвращаемое значение

Количество успешно прочитанных объектов, которое может быть меньше count, если произошла ошибка или условие конца файла.

Если size или count равно нулю, fread возвращает ноль и не выполняет никаких других действий.

fread не различает конец файла и ошибку, и вызывающие функции должны использовать feof и ferror для определения, что произошло.

Пример

#include <stdio.h>
 
enum { SIZE = 5 };
 
int main(void)
{
    const double a[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0};
    printf("Array has size %ld bytes, element size: %ld\n", sizeof a, sizeof *a);
    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");
    const size_t ret_code = fread(b, sizeof b[0], SIZE, fp); // reads an array of doubles
    if (ret_code == SIZE)
    {
        printf("Array at %p read successfully, contents:\n", (void*)&a);
        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 has size 40 bytes, element size: 8
Array at 0x1337f00d6960 read successfully, contents:
1.000000 2.000000 3.000000 4.000000 5.000000

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2023):
    • 7.21.8.1 Функция fread (с. TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.21.8.1 Функция fread (с. 243-244)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.21.8.1 Функция fread (с. 335)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.19.8.1 Функция fread (с. 301)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
    • 4.9.8.1 Функция fread

См. также

scanffscanfsscanfscanf_sfscanf_ssscanf_s
(C11)(C11)(C11)
читает форматированный ввод из stdin, потока файла или буфера
(функция)
fgets
получает строку символов из потока файла
(функция)
fwrite
записывает в файл
(функция)
Документация C++ для fread

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/io/fread

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API