fread() функция языка Си. Чтение из файла заданного количества байт.

Читает из файла и помещает в буфер заданное количество элементов размером с заданным количеством байт, смещает указатель файла на конец считанных данных.


#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t num, FILE *stream);
ptr - Указатель на буфер в который будут записаны считанные данные
size - Размер считываемого элемента в байтах (1 для байта или char, 2 для short, 4 для int)
num - Количество элементов для считывания (размер каждого элемента size байт)
stream - Указатель на файл (полученный например функцией fopen() )
Возвращает количество считанных элементов или NULL в случае ошибки или конца файла

Пример программы с использование функции fread().


#include <stdio.h> // printf(), fopen(), fread(), fwrite(), fclose()
#include <time.h> // clock()
int main(){
    FILE *file_src = fopen((char*)"src.wav",  "rb"); // файл источника звука
    FILE *file_dst = fopen((char*)"dst.wav",  "wb"); // файл для записи звука
    if(file_src == NULL || file_dst == NULL){ // Проверяем что все файлы открылись
        printf("File not open! \n");
    }else{ // Файлы доступны для записи и чтения
        const unsigned int BUF_SIZE = 44; // Размер буфера данных
        short buffer[BUF_SIZE]; // Буфер для данных (16 битные отсчеты)
        fread(buffer, 1, BUF_SIZE, file_src); // Читаем заголовок wav файла (44 байта)
        fwrite(buffer, 1, BUF_SIZE, file_dst); // Пишем заголовок wav файла
        while (!feof(file_src)){ // Читаем в цикле файл до конца файла
            unsigned int num_read_elem = fread(buffer, sizeof(short), BUF_SIZE, file_src); // Читаем блок данных размером num_read_elem
            for(unsigned int n = 0; n < num_read_elem; n++){ // Обрабатываем данные
                buffer[n] /= 2; // Уменьшаем амплитуду отсчета в 2 раза
            }
            fwrite(buffer, sizeof(short), num_read_elem, file_dst); // Пишем блок данных
        }
        fclose(file_src); // Закрываем файл
        fclose(file_dst); // Закрываем файл
        printf("Program execute time = %ld ms \n", clock());
    }
}
2023-03-14


Связанные темы

fclose() функция языка Си. Закрывает файл для записи или чтения.
feof() функция языка Си. Проверка на достижение конца файла.
fgets() функция языка Си. Чтение строки из файла или с клавиатуры.
fopen() функция языка Си. Открытие файла для чтения или записи.
fread Си, чтение из файла Си
fwrite() функция языка Си. Запись в файл заданного числа байт.