Заголовочный файл cstdio (stdio.h)
Заголовочный файл cstdio обеспечивает выполнение операций ввода/вывода. Операции ввода/вывода в С++ могут быть выполнены, с использованием Стандартной библиотеки ввода/вывода ( cstdio в С++, и stdio.h в Cи). Эта библиотека использует так называемые потоки для работы с физическими устройствами, такими как клавиатуры, принтеры, терминалы или с любыми другими типами файлов, поддерживаемых системой. Потоки являются абстракцией, для взаимодействия с устройствами, которая упрощает организацию ввода/вывода. Все потоки имеют аналогичные свойства независимо от индивидуальных особенностей физических носителей. Потоки обрабатываются в заголовочном файле cstdio как указатели на файловые объекты. Указатель на объект файла однозначно идентифицируется как поток, и используется в качестве параметра в операциях с участием этого потока. В этой библиотеке существуют три стандартных потока:
- стандартный ввод;
- стандартный вывод;
- стандартный поток ошибок.
Все эти потоки автоматически доступны, если подключить библиотеку cstdio .
Основные свойства потоков
Потоки имеют некоторые свойства, которые определяют, какие функции могут быть использованы для организации ввода/вывода и каким образом будет осуществляться обмен данными через потоки ввода или вывода. Большинство из этих свойств определяются в момент, когда поток, связанный с файлом, открыт с помощью функции fopen .
- Доступ потока к чтению или записи. Это свойство определяет, имеет ли данный поток доступ к чтению и (или) записи на физических носителях.
- Текст или двоичный код. Потоки, как считается, представляют собой набор текстовых строк, каждая из которых заканчивается символом новой строки. В зависимости от среды, в которой приложение запускается, символы новой строки могут отличаться, поэтому возникает необходимость адаптировать некоторые специальные символы в текстовом файле, согласно спецификациям используемой системы. С другой стороны, двоичный поток — это последовательность символов, записываемая или считываемая из физической среды без всякого преобразования данных.
- Буфер временного хранения данных. Буфер блока памяти, где данные накапливаются, прежде чем физически считываются или записываются на соответствующий файл или устройство. Потоки могут быть либо с полной буферизацией, или без буферизации. Если полная буферизация, то данные чтения/записи физически переносятся или изменяются, когда буфер заполняется. Буфер считается заполненным, если в поток попадает символ новой строки. Небуферизованные потоки символов, также предназначенные для чтения/записи, но буферизация в них выполняется, по возможности, как можно скорее.
Индикаторы потоков ввода/вывода
Потоки имеют определенные внутренние показатели, которые определяют их текущее состояние и которые влияют на поведение некоторых операций ввода:
- Индикатор ошибки. Этот индикатор сигнализирует о том, что произошла ошибка в ходе выполнения операции, связанной с потоком. Этот показатель может быть проверен функцией ferror , и может быть сброшен путем вызова функции clearerr или любой функцией позиционирования ( rewind , fseek и fsetpos ).
- End-Of-File индикатор. Если данный индикатор сигнализирует о том, что последняя операция чтения или записи с потоком достигла конца файла. Это можно проверить с помощью функции feof . Данный индикатор может быть сброшен путем вызова функции clearerr или любой функцией позиционирования ( rewind , fseek и fsetpos ).
- Индикатор положения. Это внутренний указатель каждого потока, который указывает на следующий символ, который должен быть считан или записан в следующей операции ввода/вывода. Его значение может быть получено функциями ftell и fgetpos .
Функции заголовочного файла cstdio
Помещает символ в поток и перемещает позицию индикатора текущего положения.
Макросы
| EOF | Макро-константа для определения конца файла. |
| FILENAME_MAX | Максимально допустимая длинна имён файлов. |
| NULL | Нулевой указатель. |
| TMP_MAX | Минимальное количество временных файлов, которые можно создать. |
А также _IOFBF , _IOLBF , _IONBF , BUFSIZ , FOPEN_MAX , L_tmpnam , SEEK_CUR , SEEK_END и SEEK_SET , каждый описан с соответствующей функцией.
Типы данных
| FILE | Этот тип данных определяет поток и содержит информацию, необходимую для управления потоком. |
| fpos_t | Тип данных fpos_t хранит информацию для указания позиции в файле. |
| size_t | Тип данных для представления количества байтов буфера или строки. |
Stdio.h
stdio.h (от англ. standard input/output header — стандартный заголовочный файл ввода/вывода) заголовочный файл стандартной библиотеки языка Си, содержащий определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода. Функциональность унаследована от «портативного пакета ввода/вывода» («portable I/O package»), написанного Майком Леском из Bell Labs в начале 1970-х. [1] C++ ради совместимости, также использует stdio.h наряду со схожим по функциональности заголовочным файлом cstdio.
Функции, объявленные в stdio.h , являются весьма популярными благодаря тому, что являясь частью Стандартной библиотеки языка Си, они гарантируют работу на любой платформе, поддерживающей Си. Приложения на отдельных платформах могут, тем не менее, иметь причины для использования функций ввода/вывода самой платформы вместо функций stdio.h .
Пример использования
Все функции в языке Си (и его многочисленных разновидностей) объявляются в заголовочных файлах. Таким образом, программистам приходится подключать файл stdio.h к исходному коду, чтобы использовать функции, объявленные в нем.
#include int main(void) int ch; while ((ch = getchar()) != EOF) putchar(ch); putchar('\n'); return 0; >
Программа, приведенная выше, считывает всю входящую информацию из стандартного ввода и выводит ее побайтно на стандартный вывод, добавляя символ перевода строки в конец вывода.
Функции-члены
Функции, объявленные в stdio.h в общем случае могут быть разделены на две категории: функции для операций с файлами и функции для операций ввода-вывода.
| Имя | Примечания |
|---|---|
| Функции для файловых операций | |
| fclose | закрывает файл, ассоциированный с переданным ей значением FILE * |
| fopen, freopen, fdopen | открывают файл для определенных типов чтения и записи |
| remove | удаляет файл (стирая его) |
| rename | переименовывает файл |
| rewind | работает аналогично fseek(stream, 0L, SEEK_SET), вызванному для потока, со сбросом индикатора ошибок |
| tmpfile | создает и открывает временный файл, удаляемый при закрытии через fclose() |
| Функции для операций ввода-вывода | |
| clearerr | очищает EOF и индикаторы ошибок для данного потока |
| feof | проверяет, установлен ли индикатор EOF для данного потока |
| ferror | проверяет, установлен ли индикатор ошибок для данного потока |
| fflush | принудительно записывает вывод, предназначенный для помещения в буфер, в файл, ассоциированный с данным потоком |
| fgetpos | сохраняет позицию указателя файла потока, ассоциированный с его первым аргументом (FILE *), в его второй аргумент (fpos_t *) |
| fgetc | возвращает один символ из файла |
| fgets | получает строку из файла (оканчивающуюся символом перевода строки или конца файла) |
| fputc | записывает один символ в файл |
| fputs | записывает строку в файл |
| ftell | возвращает указатель позиции файла, который может быть передан fseek |
| fseek | производит смещение от текущей позиции в файле на указанное количество байт,или от его начала или конца, в указаном направление. |
| fsetpos | устанавливает указатель позиции файла потока, ассоциированный с его первым аргументом (FILE *), как хранимый во втором его аргументе (fpos_t *) |
| fread | читает данные из файла |
| fwrite | записывает данные в файл |
| getc | считывает и возвращает символ из данного потока и изменяет указатель позиции файла; позволяет использоваться как макрос с теми же эффектами, что и fgetc, кроме того, что может вычислять поток более одного раза |
| getchar | имеет аналогичный эффект, что и getc(stdin) |
| gets | считывает символы из stdin до символа перевода строки и хранит их в своем единственном аргументе |
| printf, vprintf | используются для вывода в стандартный поток вывода |
| fprintf, vfprintf | используются для вывода в файл |
| sprintf, snprintf, vsprintf | используются для вывода в массив типа char (Строка в языке Си) |
| perror | записывает сообщение об ошибке в stderr |
| putc | записывает и возвращает символ в поток и изменяет указатель позиции файла на него; можно использовать как макрос с теми же свойствами, что и fputc, кроме того, что он может обрабатывать поток более одного раза |
| putchar, fputchar | аналогичны putc(stdout) |
| scanf, vscanf | используются для ввода из стандартного потока ввода |
| fscanf, vfscanf | используются для ввода из файла |
| sscanf, vsscanf | используются для ввода из массива char (то есть Строка в языке Си) |
| setbuf | |
| setvbuf | устанавливает режим буферизации для данного потока |
| tmpnam | создает временное имя файла |
| ungetc | помещает символ обратно в поток |
| puts | выводит символьную строку в stdout |
Константы-члены
Следующие константы определены в заголовочном файле stdio.h :
| Имя | Примечания |
|---|---|
| EOF | отрицательное целое число типа int , используемое для обозначения конца файла |
| BUFSIZ | целое число, равное размеру буфера, используемое функцией setbuf() |
| FILENAME_MAX | размер массива char , достаточного для хранения имени любого файла, который может быть открыт |
| FOPEN_MAX | число файлов, которые могут быть открыты одновременно; как минимум равно 8 |
| _IOFBF | сокращение от «input/output fully buffered» (полностью буферируемый ввод/вывод); целое число, которое может быть передано функции setvbuf() для запроса блока буфера ввода и вывода для открытого потока |
| _IOLBF | сокращение от «input/output line buffered» (линейно буферируемый ввод/вывод); целое число, которое может быть передано функции setvbuf() для запроса линии буфера ввода и вывода для открытого потока |
| _IONBF | сокращение от «input/output not buffered» (не буферируемый ввод/вывод); целое число, которое может быть передано функции setvbuf() для запроса небуферированого ввода и вывода для открытого потока |
| L_tmpnam | размер массива char , достаточного для хранения временного имени файла, сгенерированного функцией tmpnam() |
| NULL | макрос, расширяющий константу нулевого указателя; то есть, константу, представляющую значение указателя, гарантированно указывающего несуществующий адрес объекта в памяти |
| SEEK_CUR | целое число, которое может быть передано функции fseek() для запроса позиционирования относительно текущей позиции в файле |
| SEEK_END | целое число, которое может быть передано функции fseek() для запроса позиционирования относительно конца файла |
| SEEK_SET | целое число, которое может быть передано функции fseek() для запроса позиционирования относительно начала файла |
| TMP_MAX | максимальное число уникальных имен файлов, генерируемых функцией tmpnam() ; как минимум 25 |
Переменные-члены
Следующие переменные опеределены в заголовочном файле stdio.h :
| Имя | Примечания |
|---|---|
| stdin | указатель на FILE , указывающий на стандартный поток ввода (обычно клавиатура). |
| stdout | указатель на FILE , указывающий на стандартный поток вывода (обычно дисплей терминала). |
| stderr | указатель на FILE , указывающий на стандартный поток ошибок (обычно дисплей терминала). |
Типы членов
Типы данных, определенные в заголовочном файле stdio.h содержат:
- FILE — структура, содержащая информацию о файле или текстовом потоке, необходимую для выполнения ее операций ввода и вывода операций, включая:
- файловый дескриптор
- текущую позицию в потоке
- индикатор конца файла
- индикатор ошибок
- указатель на буфер потока, если возможно
См. также
- Поддержка больших файлов
Примечания
- ↑Brian Kernighan The UNIX Programming Environment. — Englewood Cliffs: Prentice Hall. — P. pg. 200.
Ссылки
- stdio.h — основные определения, The Single UNIX® Specification, выпуск 7 от The Open Group (англ.)
Wikimedia Foundation . 2010 .
Include stdio h что это
stdio(3) библиотека функций стандартного ввода-вывода
ОБЗОР
#include FILE *stdin;
FILE *stdout;
FILE *stderr;ОПИСАНИЕ
Библиотеки стандартного ввода-вывода предоставляют простой и эффективный интерфейс буферизируемого потока ввода-вывода. Ввод и вывод представляется логическим потоком данных, а физические характеристики ввода-вывода скрываются. Далее приводится список функций и макросов; более подробная информация находится в соответствующих страницах. Поток соотносится с внешним файлом (который также может быть физическим устройством) при открытии файла. Такое открытие может вызвать создание нового файла. Создание существующего файла вызовет потерю его содержимого. Если для файла поддерживаются запросы позиционирования (например для файла на диске, а не терминал), то индикатор позиции в файле, соответствующий потоку, устанавливается в начало файла (нулевой байт), если только файл не открыт в режиме добавления. Если используется режим добавления, то не определено, будет ли индикатор позиции в файле будет указывать на конец файла. Индикатор позиции изменяется при последующих запросах чтения, записи и изменения индикатора. Все операции ввода осуществляются так, как если бы все символы последовательно считывались вызовом функции fgetc(3); а вывод осуществляется, как если бы все символы последовательно записывались вызовом функции fputc(3). Соотношение потока с файлом прекращается при закрытии файла. Перед прекращением потоки вывода очищаются (flushed) (содержимое незаписанного буфера передаётся в системное окружение). Значение указателя на объект FILE после закрытия файла становится неопределённым (мусорным). Впоследствии файл может быть открыт ещё раз той же самой или другой программой, а его содержание может быть восстановлено или изменено (если можно перейти в его начало). Если основная функция завершает работу и возвращает значения своему родителю или если вызывается функция exit(3), то перед закрытием программы закрываются все открытые файлы (и, следовательно, очищаются все потоки вывода). Другие методы закрытия программ, например, abort(3), не всегда приводят к корректному закрытию файлов. При запуске программы предопределяются три текстовых потока, которые не следует открывать явно: стандартный ввод (standard input) (для чтения условного ввода), стандартный вывод (standard output) (для записи условного вывода) и стандартный поток ошибок (standard error) (для вывода диагностики). Сокращённые названия потоков: stdin, stdout и stderr. При открытии, стандартный поток ошибок буферизируется не полностью; стандартные потоки ввода и вывода полностью буферизируются только при условии, что они не ссылаются на какое-либо интерактивное устройство. Потоки вывода, ссылающиеся на устройства терминала, по умолчанию буферизируются построчно; ожидающие в таких потоках данные записываются автоматически всякий раз при чтении из потока ввода, ссылающегося на терминал. В случаях, когда после вывода на терминал части строки объём производимых вычислений велик, необходимо выполнять fflush(3), чтобы появилась часть строки до вычислений. Библиотека stdio является частью библиотеки libc, а функции автоматически загружаются компиляторами cc(1) и pc(1) по мере надобности. В разделе СИНТАКСИС справочных страниц указано какие файлы заголовков необходимо использовать, как выглядят объявления функций и какие внешние переменные представляют интерес для работы. В списке далее перечислены макросы; эти имена не могут быть использованы повторно без предварительного удаления их определений с помощью #undef: BUFSIZ, EOF, FILENAME_MAX, FOPEN_MAX, L_cuserid, L_ctermid, L_tmpnam, NULL, SEEK_END, SEEK_SET, SEEK_CUR, TMP_MAX, clearerr, feof, ferror, fileno, getc, getchar, putc, putchar, stderr, stdin, stdout. Для feof, ferror, clearerr, fileno, getc, getchar, putc, и putchar существуют версии в виде функций, которые используются если определения макросов были удалены явно.
Список функций
Функция Описание clearerr проверяет и сбрасывает состояние потока fclose закрывает поток fdopen функции открытия потока feof проверяет и сбрасывает состояние потока ferror проверяет и сбрасывает состояние потока fflush сбрасывает данные потока fgetc считывает следующий символ или слово из потока ввода fgetpos считывает позицию в потоке fgets считывает строку из потока fileno возвращает целочисленный дескриптор аргумента потока fopen функции открытия потока fprintf вывод по формату fpurge сбрасывает данные потока fputc выводит символ и слово в поток fputs выводит строку в поток fread считывает двоичные данные из потока ввода-вывода freopen функции открытия потока fscanf форматирует ввод fseek устанавливает позицию в потоке fsetpos устанавливает позицию в потоке ftell устанавливает позицию в потоке fwrite записывает двоичные данные потока ввода-вывода getc считывает следующий символ или слово из потока ввода getchar считывает следующий символ или слово из потока ввода gets считывает строку из потока getw считывает следующий символ или слово из потока ввода mktemp создаёт имя временного файла (уникальное) perror системные сообщения об ошибках printf вывод по формату putc выводит символ или слово в поток putchar выводит символ и слово в поток puts выводит строку в поток putw выводит символ и слово в поток remove удаляет запись из каталога rewind устанавливает позицию в потоке scanf форматирует ввод setbuf операции буферизации потока setbuffer операции буферизации потока setlinebuf операции буферизации потока setvbuf операции буферизации потока sprintf вывод по формату sscanf форматирует ввод strerror системные сообщения об ошибках sys_errlist системные сообщения об ошибках sys_nerr системные сообщения об ошибках tempnam процедуры с временными файлами tmpfile процедуры с временными файлами tmpnam процедуры с временными файлами ungetc возвращает символ в поток ввода vfprintf вывод по формату vfscanf форматирует ввод vprintf вывод по формату vscanf форматирует ввод vsprintf вывод по формату vsscanf форматирует ввод СООТВЕТСТВИЕ СТАНДАРТАМ
Библиотека stdio соответствует C89.
stdio.h
stdio.h (от англ. standard input/output header — стандартный заголовочный файл ввода-вывода) заголовочный файл стандартной библиотеки языка Си, содержащий определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода. Функциональность унаследована от «портативного пакета ввода-вывода» («portable I/O package»), написанного Майком Леском из Bell Labs в начале 1970-х. C++ ради совместимости также использует stdio.h наряду со схожим по функциональности заголовочным файлом cstdio.
Функции, объявленные в stdio.h, являются весьма популярными благодаря тому, что, являясь частью Стандартной библиотеки языка Си, они гарантируют работу на любой платформе, поддерживающей Си. Приложения на отдельных платформах могут, тем не менее, иметь причины для использования функций ввода-вывода самой платформы вместо функций stdio.h.
Стандарт определяет такое понятие, как поток — последовательный набор информации, который может быть входным или выходным, может быть предоставлен как файлом, так и устройством (например, терминалом). Поток может быть текстовым или бинарным. Текстовый поток — последовательность символов. При этом термин «символ» в данном контексте может означать как читаемый символ, так и управляющий символ (например, символ вертикальной табуляции или символ конца файла). Символы в текстовом потоке объединяются в строки. Каждая строка заканчивается символом новой строки либо символом конца файла. Бинарный поток — последовательность байтов, которые могут прозрачно представлять любую информацию (в том числе и текст). Поток может быть в одном из трёх состояний: неориентированном (по умолчанию), «широко символьном» или битовым. Состояние определяется последней функцией, которая использовала этот поток.
Пример использования
Все функции в языке Си (и его многочисленных разновидностях) объявляются в заголовочных файлах. Таким образом, программистам приходится подключать файл stdio.h к исходному коду, чтобы использовать функции, объявленные в нём.
#include int main(void)
Программа, приведённая выше, считывает всю входящую информацию из стандартного ввода и выводит её побайтно на стандартный вывод, добавляя символ перевода строки в конец вывода.
Функции
Функции, объявленные в stdio.h, в общем случае могут быть разделены на две категории: функции для операций с файлами и функции для операций ввода-вывода.
Константы
В заголовочном файле stdio.h определены следующие константы:
Переменные
Следующие переменные определены в заголовочном файле stdio.h:
Типы
Типы данных, определённые в заголовочном файле stdio.h, содержат:
- FILE — структура, содержащая информацию о файле или текстовом потоке, необходимую для выполнения её операций ввода и вывода операций, включая:
- файловый дескриптор
- текущую позицию в потоке
- индикатор конца файла
- индикатор ошибок
- указатель на буфер потока, если возможно