—правочник по 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()






–Э–µ—В –Ї–Њ–Љ–Љ–µ–љ—В–∞—А–Є–µ–≤.



–Ю—Б—В–∞–≤–Є—В—М –Ї–Њ–Љ–Љ–µ–љ—В–∞—А–Є–є:
–Т–∞—И–µ –Ш–Љ—П:
Email:
–Р–љ—В–Є–±–Њ—В: *  
–Т–∞—И –Ї–Њ–Љ–Љ–µ–љ—В–∞—А–Є–є: