Назад | Оглавление | Далее |
Функция | Краткое описание |
---|---|
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 дополнительно предоставляет следующие функции:
Функция | Краткое описание |
---|---|
rmtmp | удаление временных файлов, созданных посредством функции tmpfile |
tmpnam | сгенерировать имя временного файла |
vprintf | запись данных в поток sldout по формату |
Система программирования ТС дополнительно предоставляет следующие функции:
Функция | Краткое описание |
---|---|
vfscanf, vscanf, vsscanf | эти функции подобны функциям fscanf, scanf и sscanf, но принимают как параметр указатель на список аргументов-адресов переменных, которым присваиваются вводимые значения |
Прототипы всех функций ввода/вывода верхнего уровня содержатся в файле stdio.h.
Некоторые константы, определенные в stdio.h, могут быть полезны в программе:
Функция | Краткое описание |
---|---|
константа EOF | код, возвращаемый как признак конца файла |
константа NULL | значение указателя, который не содержит адрес никакого реально размещенного в оперативной памяти объекта |
константа BUFSIZ | определяет размер буфера потока в байтах |
имя типа FILE | структура, которая содержит информацию о потоке |
9.6.1.1. Высокоуровневое открытие файлов
Функции открытия потока возвращают указатель на тип FILE (этот указатель называют также указателем потока), этот указатель используется при дальнейших обращениях к потоку.
9.6.1.2. Стандартные потоки: stdin, stdout, stderr, stdaux, stdprn
Когда программа начинает выполняться, автоматически открываются пять потоков. Эти потоки - стандартный ввод (stdin), стандартный вывод (stdout), стандартный вывод для сообщений об ошибках (stderr), стандартный последовательный порт (stdaux) и стандартное устройство печати (stdprn).
По умолчанию стандартный ввод/вывод и стандартный вывод сообщений об ошибках связывается с консольным терминалом.
Назначения по умолчанию для стандартного порта и стандартного устройства печати зависят от конфигурации аппаратуры компьютера; эти потоки обычно связываются с последовательным портом и принтером, но могут быть и не установлены в отдельных системах.
Следующие указатели на структуру типа FILE определяются в файле stdio.h и могут использоваться в любом месте как указатели потоков:
extern FILE * stdin; - стандартный ввод
extern FILE * stdout; - стандартный вывод
extern FILE * stderr; - стандартный вывод сообщений об ошибках
extern FILE * stdaux; - стандартный порт
extern FILE * stdprn; - стандартное устройство печати
При запуске оттранслированной программы на выполнение можно использовать символы перенаправления в/в из командного языка MS-DOS (<, > или >>) для переопределения стандартного ввода и вывода программы.
Можно переопределить stdin, stdout, stderr, stdaux или stdprn так, что они будут относиться к файлу на диске или устройству. Такие возможности предоставляет функция freopen.
9.6.1.3. Управление буферизацией потоков
Открытые файлы, для которых осуществляется высокоуровневый ввод/вывод, буферизуются по умолчанию, за исключением потоков stdin, stdout, stderr, stdaux, stdprn.
Потоки stderr и stdaux - не буферизованы. Если к ним применяется функция printf или scanf, создается временный буфер. Для обоих потоков может задаваться буферизация с помощью функций setbuf или setvbuf.
Буферизация для потоков stdin, stdout, stdprn выполняется следующим образом: буфер сбрасывается при его заполнении или когда вызванная библиотечная функция ввода/вывода завершает работу.
Использованием функции setbuf или setvbuf можно сделать поток небуферизованным или связать буфер с небуферизованным до этого потоком. Буфера, размещенные в системе, недоступны пользователю, кроме буферов, полученных с помощью setbuf или setvbuf.
Буфера должны иметь постоянный размер, равный константе BUFSIZ в stdio.h.
Если используется setvbuf, размер буфера устанавливает пользователь. Буфера автоматически сбрасываются при их наполнении, или когда связанный с буфером файл закрывается, или когда происходит нормальное завершение программы.
Можно сбросить буфера в произвольный момент времени, используя функции fflush и flushall. Функция fflush сбрасывает буфер одного заданного потока, а функция flushall сбрасывает буфера всех потоков, которые открыты и буферизованы в данный момент.
9.6.1.4. Закрытие потоков
Функции fclose и fcloseall закрывают поток или потоки.
Функция fclose закрывает один заданный поток, fcloseall - все потоки, кроме потоков stdin, stdout, stderr, stdaux, stdprn.
Если программа не выполняет закрытия потоков, потоки автоматически закрываются, когда программа завершается неаварийно. Однако следует закрывать потоки по завершении работы с ними, так как число потоков, которые могут быть открыты одновременно, ограничено.
9.6.1.5. Чтение и запись данных
Функции ввода/вывода верхнего уровня позволяют передавать данные различными способами.
Операции чтения и записи в потоках начинаются с текущей позиции в потоке, идентифицируемой как "file pointer" (указатель файла) для потока. Указатель файла изменяется после выполнения операции чтения или записи.
Например, если Вы читаете один символ из потока, указатель файла продвигается на 1 байт, так что следующая операция начнется с первого несчитанного символа. Если поток открыт для добавления, указатель файла автоматически позиционируется на конец файла перед каждой операцией записи.
Поток, связанный с таким устройством, как консольный терминал, не имеет указателя файла. Программы, которые перемещают указатель файла (с помощью функции fseek), будут иметь в этом случае неопределенный результат.
9.6.1.6. Обнаружение ошибок
Когда происходит ошибка в операции с потоком, устанавливается в ненулевое значение флажок ошибки для потока. Можно использовать макроопределение ferror, чтобы определить, произошла ли ошибка.
После каждой ошибки флажок ошибки остается установленным до тех пор, пока не будет сброшен вызовом функции clearerr или rewind.
Назад | Оглавление | Далее |