Язык программирования Си для персонального компьютера
Шрифт:
Функции access, chmod, rename, stat и unlink оперируют с файлами, которые задаются через имя пути (pathname) -или через имя файла.
Функции chsize, filelength, isatty, locking, setmode, fstat работают с уже открытыми файлами, которые определяются дескрипторами (handle) (смотри далее описание функций ввода/вывода нижнего уровня).
Ввод и вывод
Функции ввода и вывода в стандартной библиотеке Си позволяют читать данные из файлов или получать их с устройств ввода (например, с клавиатуры) и записывать данные в файлы, или выводить их на различные устройства (например, на принтер).
Функции ввода/вывода делятся на три класса:
1) Ввод/вывод верхнего уровня (с использованием понятия "поток").
2) Ввод/вывод для консольного терминала путем непосредственного обращения к нему.
3)
В библиотеке есть также функции для работы с последовательным портом (СОМ), они отнесены условно ко второй группе.
функции ввода/вывода верхнего уровня обеспечивают буферизацию работы с файлами. Это означает, что, когда производится чтение информации из файла или запись информации в файл, обмен информацией осуществляется не между программой и указанным файлом, а между программой и промежуточным буфером, расположенным в оперативной памяти.
Если производится операция записи в файл, то информация из буфера записывается в файл при заполнении буфера или при закрытии файла (или при выполнении каких-то других условий, смотри ниже). Если информация считывается из файла, то она на самом деле берется из буфера, а в буфер информация считывается из файла при открытии файла и впоследствии каждый раз при исчерпании (опустошении) буфера. Буферизация ввода/вывода выполняется автоматически, она позволяет ускорить выполнение программы за счет уменьшения количества обращений к сравнительно медленно работающим внешним устройствам.
Для пользователя файл, открытый на верхнем уровне, представляется как последовательность считываемых или записываемых байтов. Чтобы отразить эту особенность организации ввода/вывода, предложено понятие "поток" (соответствует английскому слову stream). Когда файл открывается, с ним связывается поток, выводимая информация записывается "в поток", считываемая информация берется "из потока".
Когда поток открывается для ввода/вывода, он связывается со структурой типа FILE (имя типа FILE определяется с помощью конструкции typedef в файле stdio.h). Структура содержит разнообразную информацию о файле. При открытии файла с помощью функции fopen возвращается указатель на структуру типа FILE. Этот указатель (указатель потока) используется для последующих операций с файлом, пользователь не обязан вникать в способ организации потока, он только должен сохранить полученный указатель и передавать его значение всем библиотечным функциям, используемым для ввода/вывода через этот поток.
Функции в/в верхнего уровня дают возможность для буферизованного форматированного и неформатированного ввода/вывода.
Функции в/в верхнего уровня относятся к числу функций, одинаково реализуемых в различных ОС и на разных компьютерах, с их помощью пользователь имеет возможность писать переносимые программы.
Функции ввода/вывода для консоли и порта распространяют возможности функций ввода/вывода верхнего уровня на этот класс устройств, добавляя новые возможности.
Они позволяют читать или записывать на консоль (терминал) или в порт ввода/вывода (например, порт принтера). Функции в/в с портом читают или записывают данные побайтно. Некоторые дополнительные режимы устанавливаются для в/в с консоли (например: ввод с эхо-печатью символов и без эхо-печати).
Функции в/в для консоли и порта являются уникальными для компьютеров типа IBM/PC.
Функции в/в низкого уровня не выполняют буферизацию и форматирование данных; они позволяют непосредственно пользоваться средствами ввода/вывода операционной системы.
При низкоуровневом открытии файла (при помощи функции open) с ним связывается дескриптор (handle). Дескриптор является целым значением, характеризующим размещение информации об открытом файле во внутренних таблицах системы. Дескриптор используется при последующих операциях с файлом.
Функции в/в нижнего уровня из стандартной библиотеки целесообразно использовать при разработке своей собственной подсистемы ввода/вывода.
Функции в/в нижнего уровня переносимы в рамках некоторых систем программирования Си, в частности относящихся к ОС UNIX.
Функции вода/вывода высокого уровня
Функция | Краткое описание |
clearerr | очистка флажка ошибки для потока |
fclose | закрытие потока |
fcloseall | закрытие всех открытых (на верхнем уровне) файлов |
fdopen | создание потока для файла, ранее открытого на нижнем уровне, используя дескриптор |
feof | проверка на конец потока |
ferror | проверка флажка ошибок потока |
flush | сброс буфера потока на связанное с ним внешнее устройство |
fgetc | чтение символа из потока |
fileno | получение дескриптора файла, связанного с потоком |
fgetchar | чтение
|
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, могут быть полезны в программе: