Читает из файла и помещает в буфер заданное количество элементов размером с заданным количеством байт, смещает указатель файла на конец считанных данных.
#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());
}
}