下图中显示了流的有效状态及状态转换。

每个圆圈代表一种稳定的状态。 每一行代表由对流进行的函数调用所导致的转换。 五组函数可以导致状态转换。
前三个组中的函数在 <stdio.h> 中声明:
字节读取函数:
fgetc、fgets、fread、fscanf、getc、getchar、gets、scanf和ungetc字节写入函数:
fprintf、fputc、fputs、fwrite、printf、putc、putchar、puts、vfprintf和vprintf
剩余的两个组中的函数在 <wchar.h> 中声明:
宽读取函数:
fgetwc、fgetws、fwscanf、getwc、getwchar、ungetwc和wscanf,宽写入函数:
fwprintf、fputwc、fputws、putwc、putwchar、vfwprintf、vwprintf和wprintf,
状态图显示您必须在大多数写入和读取操作之间调用一个位置函数:
如果对流进行的最后一次操作是写入,则无法调用读取函数。
如果对流进行的最后一次操作是读取,则无法调用写入函数,除非该读取操作设置了文件尾指示符。
最后,状态图显示位置操作始终不会减少可后续进行的有效函数调用的次数。