C. Бочков - Язык программирования Си для персонального компьютера
Функции в/в нижнего уровня из стандартной библиотеки целесообразно использовать при разработке своей собственной подсистемы ввода/вывода.
Функции в/в нижнего уровня переносимы в рамках некоторых систем программирования Си, в частности относящихся к ОС UNIX.
Функции вода/вывода высокого уровня
Функция Краткое описание clearerr очистка флажка ошибки для потока fclose закрытие потока fcloseall закрытие всех открытых (на верхнем уровне) файлов fdopen создание потока для файла, ранее открытого на нижнем уровне, используя дескриптор feof проверка на конец потока ferror проверка флажка ошибок потока flush сброс буфера потока на связанное с ним внешнее устройство fgetc чтение символа из потока fileno получение дескриптора файла, связанного с потоком fgetchar чтение символа из стандартного потока ввода stdin fgets чтение строки из потока flushall сброс буферов всех потоков fopen открытие потока (открыть файл и связать его с потоком) fprint запись данных в поток по формату fputc запись символа в поток fputchar запись символа в стандартный поток вывода stdout fputs запись строки в поток fread неформатированное чтение данных из потока freopen повторное открытие потока в новом режиме fscanf чтение из потока по формату fseek перемещение указателя файла в заданную позицию ftell получение текущей позиции указателя файла fwrite неформатированная запись данных в поток getc чтение символа из потока (реализуется через макроопределение) getchar чтение символа из потока stdin (версия макро) gets чтение строки из потока stdin getw чтение двух байтов (по размеру int) в формате слова из потока printf запись данных в поток stdout по формату putc запись символа в поток (версия макро) putchar запись символа в поток stdout (версия макро) puts запись строки в поток putw запись двух байтов (по размеру int) в формате слова в поток rewind установка указателя по файлу на начало файла scanf чтение данных из потока stdin по формату setbuf управление буферизацией потока setvbuf управление буферизацией потока и размером буфера sprintf запись данных в строку по формату sscanf чтение данных из строки по формату tempnam сгенерировать имя временного файла в заданном каталоге tmpfile создать временный файл ungetc вернуть символ в поток vfprintf запись данных в поток по формату vsprintf запись данных в строку по форматуСистема программирования MSC дополнительно предоставляет следующие функции:
Функция Краткое описание rmtemp удаление временных файлов, созданных посредством функции tmpfile tmpnam сгенерировать имя временного файла vprintf запись данных в поток stdout по форматуСистема программирования ТС дополнительно предоставляет следующие функции:
Функция Краткое описание vfscanf эти функции подобны функциям fscanf, scanf и sscanf, но принимают как параметр указатель на список аргументов — адресов переменных, которым присваиваются вводимые значения vscanf vsscanfПрототипы всех функций ввода/вывода верхнего уровня содержатся в файле stdio.h.
Некоторые константы, определенные в stdio.h, могут быть полезны в программе:
константа EOF код, возвращаемый как признак конца файла константа NULL значение указателя, который не содержит адрес никакого реально размещенного в оперативной памяти объекта константа BUFSIZ определяет размер буфера потока в байтах имя типа FILE структура, которая содержит информацию о потокеВысокоуровневое открытие файлов
Функции открытия потока возвращают указатель на тип FILE (этот указатель называют также указателем потока), этот указатель используется при дальнейших обращениях к потоку.
Стандартные потоки: stdin, stdout, stdeir, stdaux, stdprn.
Когда программа начинает выполняться, автоматически открываются пять потоков. Эти потоки — стандартный ввод (stdin), стандартный вывод (stdout), стандартный вывод для сообщений об ошибках (stderr), стандартный последовательный порт (stdaux) и стандартное устройство печати (stdprn).
По умолчанию стандартный ввод/вывод и стандартный вывод сообщений об ошибках связывается с консольным терминалом.
Назначения по умолчанию для стандартного порта и стандартного устройства печати зависят от конфигурации аппаратуры компьютера; эти потоки обычно связываются с последовательным портом и принтером, но могут быть и не установлены в отдельных системах.
Следующие указатели на структуру типа. FILE определяются в файле stdio.h и могут использоваться в любом месте как указатели потоков:
extern FILE * stdin; — стандартный ввод
extern FILE * stdout; — стандартный вывод
extern FILE * stderr; — стандартный вывод сообщений об ошибках
extern FILE * sidaux; — стандартный порт
extern FILE * stdprn; — стандартное устройство печати
При запуске оттранслированной программы на выполнение можно использовать символы перенаправления в/в из командного языка MS-DOS ( < , > или >> ) для переопределения стандартного ввода и вывода программы.
Можно переопределить stdin, stdout, stderr, stdaux или stdprn так, что они будут относиться к файлу на диске или устройству. Такие возможности предоставляет функция freopen.
Управление буферизацией потоков
Открытые файлы, для которых осуществляется высокоуровневый ввод/вывод, буферизуются по умолчанию, за исключением потоков stdin, stdout, stderr, stdaux, stdprn.
Потоки stderr и stdaux — не буферизованы. Если к ним применяется функция printf или scanf, создается временный буфер. Для обоих потоков может задаваться буферизация с помощью функций setbuf или setvbuf.
Буферизация для потоков stdin, stdout, stdprn выполняется следующим образом: буфер сбрасывается при его заполнении или когда вызванная библиотечная функция ввода/вывода завершает работу.
Использованием функции setbuf или setvbuf можно сделать поток небуферизованным или связать буфер с небуферизованным до этого потоком. Буфера, размещенные в системе, недоступны пользователю, кроме буферов, полученных с помощью setbuf или setvbuf.