2012-02-29 4 views
0

Я имею дело с кодом, который считывает данные из двоичного файла. Код приведен здесь. Кто-нибудь, пожалуйста, разъяснит мне роль fseek и fread здесь.Чтение двоичных файлов

fc = fopen(CLOUDS_FILE, "rb"); 
if (fc == NULL){ fputs("File open error.\n", stderr); exit(1); } 
crs = aux[CLRS]; 
fpos = (int) (pixel[2]*crs*crs + pixel[1]*crs + pixel[0]); 
flsz = sizeof(fd); 
fseek(fc, fpos*flsz, 0); 
rd = fread((void *) &fd, flsz, 1, fc); 
if (rd != 1){ fputs("Read error.\n", stderr); exit(1); } 
fclose(fc); 

ответ

0
#include <stdio.h> 

    int fseek(FILE *stream, long offset, int whence); 

FSEEK() устанавливает индикатор позиции файла для потока указывает поток. Новая позиция, измеренная в байтах, получается путем добавления смещенных байтов в позицию, заданную по тактике. Если значение установлено в SEEK_SET, SEEK_CUR или SEEK_END, смещение относительно начинается с файла, текущего указателя положения или конца файла, соответственно.

#include <stdio.h> 

    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 

Функция Fread() считывает nmemb элементы данных, причем каждый байт размер долго, из потока, на который указывает поток, сохраняя их в местах расположения ции заданной PTR.

0

Конечно, fseek пересылает индекс «read from» в файл в вычисленное смещение в CLOUDS_FILE, в то время как fread читает один объект размером sizeof (fd) (независимо от того, что fd есть, поскольку это не в вашем вставленном коде) в fd.

0

fseek() изменяет смещение файла. fread() считывает данные, начиная с текущего смещения, увеличивая смещение на количество прочитанных элементов.

(Или это вопрос что-то совсем другое? Я имею в виду, выше что-то можно тривиальным фигуру, читая страницы Справочника)

1

Двоичное чтение файла происходит с внутренним «указатель», так же, как текстовые редакторы при редактировании позиции курсора. При открытии файла в режиме чтения (с использованием fopen) указатель будет в начале файла. Операции чтения (например, fread, которые будут считывать указанное количество байтов из потока) начнут читать в позиции указателя и обычно продвигают указатель, когда они будут выполнены. Если нужно только прочитать определенную часть файла, можно вручную установить указатель на определенную (относительную или абсолютную) позицию, для чего используется fseek.

Смежные вопросы