Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Функции блочного ввода и вывода




Обычно применяемые функции для этих целей (прототипы в stdio.h):

int fread(void * ptr, int size, int n, FILE * fp)

int fwrite(void * ptr, int size, int n, FILE * fp),

где ptr – указатель на буфер откуда выбираются или куда пишутся данные,

size – размер одного переносимого элемента данных,

n – число переносимых элементов данных,

fp – указатель на поток.

При чтении возвращается число прочитанных элементов (не байтов!) или EOF, если ошибка или конец файла. При выводе возвращается число записанных элементов (не байтов!) или EOF, если ошибка или конец файла.

Пример

Пусть в программе используется указатель book_ptr на структурный объект типа BOOKS и открыты файловые потоки для ввода – istream и вывода – ostream; istream и ostream – указатели на соответствующие потоки. Тогда в программе можно применить следующие вызовы указанных выше функций для ввода и вывода:

fread(book_ptr, sizeof(BOOKS), 1, istream),

fwrite(book_ptr, sizeof(BOOKS), 1, ostream).

Ввод и вывод выполняются относительно текущего состояния указателя записей в файле. Управление указателем рассматривается далее. Обычное управление указателем сводится к установке его значения сразу за прочитанной или записанной записью.

 

Произвольный доступ к данным с применением блочного ввода/вывода

 

Указанный тип доступа обеспечивается функциями, которые позволяют перемещать указатель текущей записи в пределах файла. После перемещения указателя можно применять обычные функции ввода/вывода, в том числе и блочного типа. Прототипы функций размещаются в файле stdio.h.

void rewind (FILE * fp)

Функция позиционирует указатель текущей записи в начало файла, связанного с потоком fp.

int fseek(FILE * fp, long offset, int from_where)

Сдвиг положения указателя записи вправо к концу файла fp на offset байт, если offset>0, или иначе к началу файла, если offset<0. Параметр from_where принимает значения:

SEEK_SET или 0 – сдвиг относительно начала файла,

SEEK_CUR или 1 – сдвиг относительно текущего положения указателя,

SEEK_END или 2 – сдвиг относительно конца файла.

В случае успеха функция возвращает 0, иначе EOF. Установка указателя правее старого EOF не считается ошибкой и в некоторых ситуациях в случае закрытия файла, ведет к «наращиванию» размера файла. Установка левее начала файла считается ошибкой.

Функции ftell(), fgetpos(), fsetpos() – либо возвращают, как результат вызова, значение указателя текущей записи, либо устанавливают новое значение указателя. Последние 2 функции используются, когда необходимо запомнить некоторое положение указателя в переменной, выполнить ввод или вывод, и затем восстанавливая значение указателя, вернуться к исходной записи.

int fflush(FILE * fp) (см. Лекции 3 и 14)

Функция флэширует поток ввода/вывода fp. Для ввода – это очистка буфера, а для вывода – выталкивание остатка буфера в файл. Функция возвращает EOF, если обнаруживаются ошибки во время выполнения операции. Функцию необходимо применять когда поток открыт для чтения и записи в тот момент, когда изменяется направление передачи данных, чтобы синхронизировать данные в файле и накопленные данные в буфере. При выполнении rewind() или fseek() флэширование выполняется автоматически. Так, при выполнении лабораторных работ, если обнаруживается ситуация, что операция записи выполнялась, но данные не попали в файл, необходимо применить флэширование.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных