Чтение онлайн

ЖАНРЫ

Язык программирования Си для персонального компьютера

Субботин Д. М.

Шрифт:

Для пользователя файл, открытый на верхнем уровне, представляется как последовательность считываемых или записываемых байтов. Чтобы отразить эту особенность организации ввода/вывода, предложено понятие "поток" (соответствует английскому слову stream). Когда файл открывается, с ним связывается поток, выводимая информация записывается "в поток", считываемая информация берется "из потока".

Когда поток открывается для ввода/вывода, он связывается со структурой типа FILE (имя типа FILE определяется с помощью конструкции typedef в файле stdio.h). Структура содержит разнообразную информацию о файле. При открытии файла с помощью функции fopen возвращается указатель на структуру типа FILE. Этот указатель (указатель потока) используется для последующих операций с файлом, пользователь не обязан вникать в способ организации потока, он только должен сохранить полученный указатель и передавать его значение всем библиотечным функциям, используемым для ввода/вывода через этот поток.

Функции в/в верхнего уровня дают возможность для буферизованного форматированного и неформатированного ввода/вывода.

Функции в/в

верхнего уровня относятся к числу функций, одинаково реализуемых в различных ОС и на разных компьютерах, с их помощью пользователь имеет возможность писать переносимые программы.

Функции ввода/вывода для консоли и порта распространяют возможности функций ввода/вывода верхнего уровня на этот класс устройств, добавляя новые возможности.

Они позволяют читать или записывать на консоль (терминал) или в порт ввода/вывода (например, порт принтера). Функции в/в с портом читают или записывают данные побайтно. Некоторые дополнительные режимы устанавливаются для в/в с консоли (например: ввод с эхо-печатью символов и без эхо-печати).

Функции в/в для консоли и порта являются уникальными для компьютеров типа IBM/PC.

Функции в/в низкого уровня не выполняют буферизацию и форматирование данных; они позволяют непосредственно пользоваться средствами ввода/вывода операционной системы.

При низкоуровневом открытии файла (при помощи функции open) с ним связывается дескриптор (handle). Дескриптор является целым значением, характеризующим размещение информации об открытом файле во внутренних таблицах системы. Дескриптор используется при последующих операциях с файлом.

Функции в/в нижнего уровня из стандартной библиотеки целесообразно использовать при разработке своей собственной подсистемы ввода/вывода.

Функции в/в нижнего уровня переносимы в рамках некоторых систем программирования Си, в частности относящихся к ОС 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.

Поделиться с друзьями: