Cтраница 3
Отметим, что объект outCredit класса ofstream открывается в режиме открытия файла ios:: ate. Указатель позиции файла put первоначально устанавливается на конец файла, но данные могут быть записаны в любое место в файле. [31]
По оператору READ считывается запись, на которую установлена позиция файла. После этого позиция файла перемещается в начало следующей записи. [32]
Оператор REWIND служит для изменения позиции файла. По оператору REWIND позиция файла устанавливается на начало первой записи с наименьшим значением ключа ссылки. [33]
Считываются две записи с фамилиями СИМОНОВ и ЕРЕМИН. По оператору REWIND позиция файла устанавливается в начало первой записи с наименьшим значением ключа ссылки. [34]
Таким образом, для первой записи указатель позиции файла устанавливается на байт 0 файла. Символическая константа SEEK SET показывает, что указатель позиции файла устанавливается относительно начала файла на величину смещения. На рис. 11.14 показан указатель файла, ссылающийся на структуру FILE в памяти. Указатель позиции файла показывает, что следующий байт, который будет считан или записан, это пятый байт от начала файла. [35]
Функция fwrite пересылает в файл заданное число байт начиная с указанного адреса памяти. Данные записываются с того места в файле, которое обозначено указателем позиции файла. Функция fread пересылает заданное число байт из места в файле, определенного указателем позиции файла, в массив в памяти, начинающийся с указанного адреса. [36]
Указатель get показывает позицию в файле, из которой производится последующий ввод, а указатель put показывает позицию в файле, в которую разместятся следующие выходные данные. Как класс is-tream, так и класс ostream имеют функции-элементы для позиционирования указателя позиции файла. [37]
Функция-элемент write класса ostream выводит фиксированное число байтов, начиная от заданного места в памяти, в заданный поток. Когда поток связан с файлом, данные пишутся, начиная с позиции в файле, определяемой при помощи указателя позиции файла put. Функция-элемент read класса istream вводит фиксированное число байтов из заданного потока в область памяти, начиная с указанного адреса. [38]
Программа на рис 11.12 записывает данные в файл credit. Для хранения данных в специально определенных местах файла используется комбинация fseek и fwrite. Функция fseek устанавливает указатель позиции файла в заданное положение, после чего fwrite записывает данные. [39]
Функция ftell возвращает значение индикатора текущей позиции в файле для указанного потока stream. Возвращаемое значение для бинарного потока равно числу символов от начала файла. Для текстового потока индикатор позиции файла содержит неопределенную информацию, которую может использовать функция fseek для возвращения индикатора текущей позиции в файле к значению позиции, полученному в результате вызова ftell; разность между двумя такими возвращаемыми значениями не обязательно равна числу записанных или прочитанных символов. В случае успешного завершения ftell возвращает значение индикатора текущей позиции в файле. При возникновении ошибки ftell возвращает значение - 1L и помещает в еггпо определенное в реализации системы программирования положительное значение. [40]
Функция ftell получает текущее значение индикатора позиции файла для потока, указываемого stream. Для двоичных потоков данное значение равно числу символов от начала файла. Для текстового файла его индикатор позиции файла содержит неспецифицированную информацию, используемую функцией fseek для возвращения индикатора позиции файла для потока в положение, соответствующее моменту вызова функции ftell; разность между возвращаемыми ftell значениями не может быть использована для определения числа записанных или считанных символов. В случае успеха функция ftell возвращает текущее значение индикатора позиции файла для потока. При сбое функция ftell возвращает - 1L и передает определяемое реализацией положительное значение в еггпо. [41]
Функция fread считывает в массив, указанный ptr, до nmemb элементов, размер которых указан параметром size, из потока, указываемого stream. Индикатор позиции файла для потока ( если определен) продвигается вперед на количество успешно прочитанных символов. В случае ошибки конечное значение индикатора позиции файла для потока становится неопределенным. Если элемент считан частично, то его значение не определено. [42]
Функция fwrite записывает из массива, указанного ptr, до nmemb элементов, размер которых указан параметром size, в поток, указываемый stream. Индикатор позиции файла для потока ( если определен) продвигается вперед на количество успешно записанных символов. В случае ошибки конечное значение индикатора позиции файла для потока становится неопределенным. Фуш я fwrite возвращает количество упешно записанных элементов, которое может быть меньше, чем nmemb, только в случае ошибки записи. [43]
Функция fwrite пересылает в файл заданное число байт начиная с указанного адреса памяти. Данные записываются с того места в файле, которое обозначено указателем позиции файла. Функция fread пересылает заданное число байт из места в файле, определенного указателем позиции файла, в массив в памяти, начинающийся с указанного адреса. [44]
Функция ftell получает текущее значение индикатора позиции файла для потока, указываемого stream. Для двоичных потоков данное значение равно числу символов от начала файла. Для текстового файла его индикатор позиции файла содержит неспецифицированную информацию, используемую функцией fseek для возвращения индикатора позиции файла для потока в положение, соответствующее моменту вызова функции ftell; разность между возвращаемыми ftell значениями не может быть использована для определения числа записанных или считанных символов. В случае успеха функция ftell возвращает текущее значение индикатора позиции файла для потока. При сбое функция ftell возвращает - 1L и передает определяемое реализацией положительное значение в еггпо. [45]