Информатика и технология программирования


Двоичный файл - неограниченный массив байтов - часть 2


Для дополнения файла новыми данными необходимо установить текущую позицию на конец файла и выполнить операцию записи. Текущая позиция представляется в программе переменной типа long. Для работы с ней в стандартной библиотеке имеются две функции:


long ftell(FILE *fp);

возвращает текущую позицию в файле. Если по каким-то причинам текущая позиция не определена, функция возвращает -1L. Это же самое значение будем использовать в дальнейшем для представления недействительного значения файлового указателя (файловый NULL ), самостоятельно определив его


&#35define FNULL -1L

Вторая функция устанавливает текущую позицию в файле на байт с номером pos. Параметр mode определяет, относительно чего отсчитывается текущая позиция в файле, и имеет следующие символические и числовые значения (установленные в stdio.h) .


int fseek(FILE *fp, long pos, int mode);


&#35define SEEK_SET 0 // Относительно начала файла


// начало файла - позиция 0


&#35define SEEK_CUR 1 // Относительно текущей позиции,


// &#62 0 - вперед, &#60 0 - назад


&#35define SEEK_END 2 // Относительно конца файла


// (значение pos - отрицательное)


Функция fseek возвращает значение 0 при успешном позиционировании и -1 (EOF) -при ошибке. Получить текущую длину файла можно простым позиционированием:


long fsize;
fseek(fl,0L,SEEK_END); // Установить позицию на конец файла


fsize = ftell(fd); // Прочитать значение текущей позиции


Функции fread и fwrite используются для перенесения данных из файла в память программы (чтение) и обратно (запись).


int fread (void *buf, int size, int nrec, FILE *fd);
int fwrite (void *buf, int size, int nrec, FILE *fd);

Особенностью этих функций является то, что для них безразличен (неизвестен) характер структуры данных в той области памяти, в которую осуществляется ввод-вывод (указатель void* buf). Функци fread читает, а функция fwrite пишет в файл, начиная с текущей позиции, nrec элементов размерностью size байтов каждый, возвращая количество успешно прочитанных (записанных) элементов.




- Начало -  - Назад -  - Вперед -



Книжный магазин