Г. Шилдт - Полный справочник по C++ (1109478), страница 103
Текст из файла (страница 103)
Вторая библиотека содержит классы и является объектно-ориентированной. В этой части мы рассматриваем библиотеку стандартных функций, а в ~етвертой — библиотеку классов. Б иблиотека стандаргг1ых функций разделяется на следующие части. ° Функции ввода-выводя ° Функции обработки строк и символов ° Математические функции ° Функции ввода-вывода времени и даты, а также локализации ° Функции динамического распределения памяти ° Вспомогательные функции ° Функции для работы с расширенными символами Последняя категория функций добавлена в стандарт языка С в 1995 году и впоследствии унаследована языком С++.
Она позволяет создавать расширенные (нсзьак е) эквиваленты нескольких библиотечных функций. Честно говоря, применение расширенных символов крайне ограничено, и в языке С++ есть более эффективный способ, который описан в главе 31. Стандарт языка С99 добавил в библиотеку функций несколько новых элементов. Некоторые из них, например, функции для работы с комплексными числами и макросы обобщенного типа, являются математическими и дублируют свойства, которые уже есть в языке С++. В любом случае библиотечные функции, определенные стандартом С99, несовместимы с языком С++.
По этой причине мы не рассматриваем в нашей книге стандартную библиотеку языка С, соответствующую стандарту С99. И последнее: все компиляторы поддерживают больше функций, чем предусмотрено стандартом языка С++. Обычно дополнительные функции предназначены для обеспечения взаимодействия между программами и операционной системой, а также для реализации лругих машинозависимых операций.
Описание этих функций следует искать в технической документации компилятора. Полный функции Ввода-Вывода языка С спи авочник по В ф 1 е Функция Ьо1 1 Кьпс1ис)е <свесйо> Епс ееое(гтьв *пгеат) Функция йеой() проверяет позицию файлового курсора, чтобы распознать конец файла, связанного с указателем з(геат. Если курсор находится в конце фагьза, возврашается ненулевое значение, в противном случае возврашается нуль. После достижения конца файла последующие операции чтения вернут константу вог, пока не будет вызвана функция геийп()() или евееи(). Функция ееой() особенно полезна при работе с бинарными файлами„поскольку признак конца файла является двоичным целым числом.
Для распознавания конца файла следует вызывать функцию йеой(), а не анализировать значение, возврашаемое функцией яеес() . Зависимые функции: с1еагегг(), йеггог(), реггог(), росс() и яесс(). Функция 1еггог Вьпс1псе <свСЖо> Епс Ееггог(втьв *зттшл) Функция йехгог() анализирует ошибку, связанную с файлом, на который ссылается указатель жгеапь Если никаких ошибок не обнаружено, возвращается нуль, в противном случае возврашается ненулевое значение.
Чтобы определить точную природу ошибки, следует вызвать функцию реггог(). Зависимые функции: с1еагегг(), йеой() и реггог(). Функция й!иФ Мьпс1пс)е <свебйо> 1пе ЕЕ1пап(Г1ЬВ "Мгеат); Если указатель з(геат ~вязан с файлом, открытым для записи, вызов функции ЕЕ1па)х() принудительно записывает содержание буфера в файл, который остается о~крытым. Если функция выполнена успешно, возврашается нуль, в противном случае возврашается константа воя. При нормкзьном завершении программы и переполнении все буфера очишаются автоматически.
Закрытие фаила также сопровождается опустошением буфера, связанного с ним, и записью его содержимого в закрываюшийся файл, Зависимые функции: ес1ове(), еорап(), егеа(((), Еигйсе(), яеес() и расс(). Функция 1деФс ВЕпс1ис)е <свес)1о> Епс Есесс(утье *птат); Функция йяеес() извлекает из вхолного потока жгеат следуюший символ и увеличивает файловый курсор на единицу. Символ считывается как значение типа ппайвпед сваг и преобразуется в целое число.
при обнаружении конца файла функция еяеес() возврашает константу воя. поскольку значение вог являешься целым числом, при работе с бинарными файлами следует использовать функцию еесе(). Если функция ересс() обнаруживает ошибку, Глава 25. Функции ваода-вывода языка С она также возвращает константу еое. При работе с бинарными файлами для анализа ошибок следует применять функцию ееккое(). Зависимые функции. ерове(), деес(), реке() и еореп().
Функция 19е1рое ! Н1пс1ие)е <свМ1о> Епе Едесров(РХЬЕ *з<геот, Еров Е *роппоп) Функция едееров() сохраняет в обьекте, на который ссылается указатель роз)лол, текущее значение файлового курсора. Объект, на который ссылается указатель розулол, должен иметь тип Еров е. Сохраняемое значение оказывается полезным, лишь если в дальнейшем вызывается функция евееров() . При возникновении ошибки функция Едеаров <) ВОЗВРашает положительное число, в противном случае — нуль.
Зависимые функции: Евееров(), Елее)<О и Еке11(). Функция 19еЬ ! * Ипс1ие)е <саЫ1о> снах *едеев(с)1аг мг, 1пе нтл, етье "мгеат) г Функция едеев () считывает не более лииг-1 символов из потока жгеат и помешает их в символьный массив, на который ссылается указатель жг. Символы считываются до тех пор„пока не встретится символ перехода на новую строку либо признак конца файла, либо пока не будет достигнут заданный предел. Вслед за последним считанным символом в массив записывается нулевой байт. Символ перехода на новую строку сохраняется и становится частью массива, адресуемого указателем жг.
В случае успеха функция Едекв<) возвращает указатель Пг, а при неудаче — нулевой указатель. Если при чтении символов происходит ошибка, содержимое массива, адресуемого указателем Мг, становится неопределенным. Поскольку нулевой указатель возвращается и при возникновении ошибки, и при досп<жении конца файла, для выяснения, что же произошло на самом деле, необходимо использовать функции ЕеоЕ < ) илн Еекеох< ) . Зависимые функции: Ерово, Едеев(), деЕв() ираке<).
Функция 1ореп Ипс1ие)е <сесе)1о> Р1ЬЕ "Еореп(сапах с)1ат "~юатЕ, СОПВС с)зат *таде) < Функция Еореп() открывает файл, имя которого задается парах<стром <пате, и возвращает указатель на поток, связанный с этим файлом. Вид операций, которые можно выполнять с этим файлом, задается параметром тое<е. Возможные значения параметра тоде приведены в табл. 25.1. Имя файла должно представлять собой строку символов и не противоречить правилам, установленным операционной системой.
Эта строка может также содержать спецификацию пути к файлу. Если функция Еореп() успешно открыла указанный файл, она возвращает указатель типа яхье. При неудаче возвращается нулевой указатель. Как следует из таблицы„файл может открь<ааться как в текстовом, так и в бинарном режиме. В текстовом режиме может происходить преобразование некоторых символов. Например, символ перехода на новую строку может преобразовываться в комбинацию кодов возврата каретки и перевода строки. В двоичном режиме подобные преобразования не выполняются. Часть )П. Библиотека стандархньп функций Таблица 25.1. Возможные значения параметра гпо<(е функции (орало Пред яазязчаиив Открывает текстовый файл для чтения Создает текстовый файл для записи Записывает информацию в конец существующего текстового файла Открывает бинарный файл для чтения Создает бинарный файл дпя записи Записывает информацию в конец существующего бинарного файла.
Открывает текстовый файл дпя чтения и записи Создает текстовый файл для чтения и записи Открывает текстовый файл для чтения и записи Открывает бинарный файл дпя чтения и записи Создает бинарный файл дпя чтения и записи Открывает бииарныи файл для чтения и записи "а" "гЬ" "иЬ" "аЬ "г+" "и+" "а+" гь+ или г+ь "иь+" или "и+ь" аь+ или а+ь Следующий фрагмент программы показывает, как правильно открывать файл.
втьк *бр; 11 (<ср = горел("Севе", "и">) == щП,Ь] ( ргтпсб("Невозможно открыть файл.~п")т ехэс()т Этот способ позволяет обнаруживать все ошибки, которые могут возникнуть во время открытия файла, например, попытку открыть фаил, защищенный от записи. Если функция горепО открывает файл ши записи, любой существующий файл с укзэанным именем будет стерт, а вместо него будет открыт новый файл.
Если файла с таким именем не существует, он будет создан. Если файл открывается лля чтения, необходимо, чтобы он уже сушествовал, в противном случае произойдет ошибка. Если требуется дописать инфорл<ацию в конец сун<ествуюшего файла, необходимо использовать режим "а". Если такого файла нет, он будет создан. Осуществляя доступ к файлу, открьпому лля чтения и записи, нельзя сразу после операции записи выполнять операцию чтения (и наоборот), не вызвав одну из функций яд1иеь< >, деве)к О, двесров( > нли гем1паО . Исключение составляет файл, открытый для чтения, поскольку прн достижении его конца операцию записи можно выполнять сразу после операции чтения. Зависимые функции: дс1оее<), Дгеакз(), Дыг1се(), рсссО н десс().
Функция 1рппй 1 * Зэпс1ис>е ксвгс(1о> эпс гргэпсг(втье *тггеаяп сопят сьаг 'Гогпют, ...); Глава 25. Функции ввода-вывода языка С Функция дрг1псд(> выводит в поток, связанный с указателем атаке, значения своих аргументов в соответствии со строкойуогта(.Функция возвращает количество реально выведенных символов.
При возникновении ошибки возвращается отрицательноечисло. Количество аргументов может изменяться от нуля до максимального значения, опрелеленного операционной системой. Операции преобразования, заданные в строке формата, и команды вывода идентичны операциям и командам, выполняемым функцией рг1псд(>. Их полное описание содержится в разделе, посвященном функции рг1псд () . Зависимые функции: рг1пед<) и десепдО. Функция 1рц$о * К1пс1ис)е <свес1о> зпс григе()гс сй, Рпе «гггеат) Функция крике() записывает символ сй в текущую позицию потока жгеат, а затем увеличивает файловый курсор на единицу. Хотя по историческим причинам симвсл сй объявляется как переменная целого типа, функция дреке() преобразовывает ее в тип ипв1дпед спек.