Состояния потока
Допустимые состояния и переходы состояний для потока показаны на следующем рисунке.
Каждый из кругов обозначает устойчивое состояние. Каждая из линий задает переход, который может возникать в результате вызова функции, работающей в потоке. Пять групп функций могут вызвать переходы состояний.
Функции в первых трех группах объявляются в <stdio.h>:
Функции чтения байтов:
fgetc
,fscanf
getc
fread
fgets
, ,getchar
, иscanf
gets
ungetc
Функции записи байтов:
fprintf
,fputc
putc
fputs
puts
fwrite
putchar
printf
vfprintf
иvprintf
Функции в оставшихся двух группах объявляются в <wchar.h>:
Широкие функции чтения:
fgetwc
,fgetws
,fwscanf
,getwc
, ,ungetwc
getwchar
иwscanf
,Функции широкой записи:
fwprintf
,fputwc
,fputws
putwc
, ,putwchar
,vfwprintf
,vwprintf
иwprintf
,
Схема состояний показывает, что между большинством операций записи и чтения необходимо вызывать одну из функций позиционирования:
Невозможно вызвать функцию чтения, если последняя операция в потоке была записью.
Невозможно вызвать функцию записи, если последняя операция в потоке была чтением, если только эта операция чтения не задает индикатор конца файла.
Наконец, схема состояний показывает, что операция позиционирования никогда не уменьшает число допустимых вызовов функций, которые могут следовать далее.