Справочник по C/C++
Стандартные функции ввода вывода языка C

В этой главе описаны стандартные С-функции ввода-вывода, т.е. функции, определенные стандартом С89 и добавленные стандартом С99. Функции, определенные в версии С89, поддерживаются и компиляторами C++ для обеспечения совместимости с языком С, поэтому их можно уверенно использовать в С++-программе.

В языке С с функциями ввода-вывода связан заголовок <stdio.h>, а в C++ аналогичный заголовок называется <stdio>. Для простоты в этой главе будет использовано имя С-заголовка, но ссылки на <stdio.h> применимы и к заголовку <stdio>.

Заголовок <stdio.h> определяет несколько макросов и типов, требуемых файловой системой в среде С. Тип FILE — самый важный; он используется для объявления указателя на файл. Двумя другими часто используемыми типами являются size_t и fpos_t, которые представляют собой некоторую разновидность целых без знака. Тип size_t определяет объект, который предназначен для хранения размера самого большого файла, разрешенного операционной средой. Тип fpos_t определяет объект, который может хранить всю информацию, необходимую для уникального определения каждой позиции внутри файла. Самым популярным макросом, определенным в этом заголовке, является макрос EOF, значение которого указывает на конец файла. Другие типы данных и макросы, определенные в заголовке <stdio.h>, описаны вместе с функциями, с которыми они связаны.

Многие функции ввода-вывода при возникновении ошибки устанавливают встроенную глобальную переменную целого типа с именем errno. Ваша программа может проанализировать ее, чтобы получить более подробную информацию об ошибке. Значения, которые может иметь переменная errno, зависят от конкретной реализации компилятора.

В системе ввода-вывода, действующей в среде С, используется понятие потока. Поток — это логическое устройство, связываемое с реальным физическим устройством, которое называют файлом, в момент его открытия. В С-системе ввода-вывода все потоки имеют одни и те же свойства, но файлы могут отличаться один от другого своими качествами. Например, дисковый файл позволяет произвольный доступ, а модем — нет. Поэтому С-система ввода-вывода обеспечивает определенный уровень абстракции между программистом и физическим устройством. Абстракция — это поток, а устройство — это конкретный файл. В таком случае, несмотря на различия, присущие реальным физическим устройствам, можно поддерживать согласованный логический интерфейс.

Поток связывается с файлом посредством обращения к функции fopen(), и вся дальнейшая работа с потоком происходит благодаря использованию файлового указателя (который является указателем типа FILE *). В определенном смысле файловый указатель играет роль клея, который обеспечивает целостность всей системы.

В начале работы программы автоматически открываются три заранее определенных потока: stdin, stdout и stderr. Их называют стандартными потоками ввода, вывода и ошибок соответственно. По умолчанию они связаны с консолью, но их можно перенаправить на устройство любого другого типа.

В версии С99 введен квалификатор restrict, который применяется к некоторым параметрам нескольких функций, первоначально определенных в версии С89. При рассмотрении каждой такой функции будет приведен ее прототип, используемый в среде С89 (а также в среде C++), а параметры с атрибутом restrict будут отмечены в описании этой функции.

Список функций

Работа с стандартными потоками

getchar — Возвращает следующий символ из стандартного потока stdin
gets — Читает символы из стандартного потока stdin и помещает их в символьный массив
perror — Преобразует значение глобальной переменной errno в строку и записывает эту строку в поток ошибок stderr
printf — Записывает в стандартный поток stdout значения аргументов из заданного списка аргументов в соответствии со строкой форматирования
putchar — Записывает символ, содержащийся в младшем байте параметра в стандартный выходной поток stdout
puts — Записывает строку в стандартное выходное устройство
scanf — Читает поток stdin
vfprintf — Эквивалентно действию функции vprintf() но список аргументов заменен указателем на список аргументов
vfscanf — Аналогично fscanf(), но но список аргументов заменен указателем на список аргументов
vprintf — Эквивалентно действию функции printf() но список аргументов заменен указателем на список аргументов
vscanf — Аналогично scanf(), но но список аргументов заменен указателем на список аргументов
vsnprintf — Эквивалентно действию функции snprintf() но список аргументов заменен указателем на список аргументов
vsprintf — Эквивалентно действию функции sprintf() но список аргументов заменен указателем на список аргументов
vsscanf — Аналогично sscanf(), но но список аргументов заменен указателем на список аргументов

Работа с файловыми потоками

clearerr — Сбрасывает флажок ошибки связанный с потоком
fclose — Закрывает файл, связанный с потоком stream
feof — Проверка конца файла
ferror — Проверка наличия файловой ошибки
fflush — Записывает содержимое выходного буфера в файл
fgetc — Возвращает из указаного входного потока следующий символ
fgetpos — Сохраняет текущее значение индикатора позиции файла в объекте
fgets — Читает символы из указанного файлового потока и помещает в символьный массив
fopen — Открывает файл и возвращает поток, связываемый с этим файлом
fprintf — Выводит в указанный файловый поток значения аргументов
fputc — Записывает символ в заданный поток
fputs — Записывает в заданый поток содержание строки
fread — Читает из указанного потока заданное количество объектов
freopen — Связывает существующий поток с другим файлом
fscanf — Читает указанный поток
fseek — Смещает индикатор позиции файла, связанного с потоком
fsetpos — Перемещает индикатор позиции файла в место, заданное объектом
ftell — Возвращает текущее значение индикатора позиции файла для заданного потока
fwrite — Записывает в указанный поток некоторое количество объектов
getc — Возвращает следующий символ из указаного потока
putc — Записывает символ, содержащийся в младшем байте параметра в указанный выходной поток
rewind — Перемещает индикатор позиции файла в начало заданного потока
setbuf — Задает буфер, которым будет пользоваться заданный поток
setvbuf — Позволяет задать буфер, его размер и режим работы с указанным потоком
tmpfile — Открывает временный двоичный файл для операций чтения/записи
tmpnam — Генерирует уникальное имя файла и сохраняет его в массиве
ungetc — Возвращает символ, заданный младшим байтом

Работа с файловой системой

remove — Удаляет файл
rename — Заменяет имя файла

Другие функции

snprintf — Записывает определёное количество значений аргументов из заданного списка аргументов, в соответствии со строкой форматирования, в массив
sprintf — Записывает в массив значения аргументов из заданного списка аргументов в соответствии со строкой форматирования
sscanf — Читает данные из массива, аналогично scanf()



Реклама