ストリームの状態
ストリームの有効な状態および状態遷移を、次の図に示します。
円の矢印はそれぞれ安定状態を示しています。 線の矢印はそれぞれストリームを操作する関数呼び出しの結果発生する、遷移を示しています。 5 つの関数グループで、状態遷移が発生する可能性があります。
最初の 3 つのグループの関数は、<stdio.h> で宣言されます。
バイト読み取り関数:
fgetc
、fgets
、fread
、fscanf
、getc
、getchar
、gets
、scanf
、およびungetc
バイト書き込み関数:
fprintf
、fputc
、fputs
、fwrite
、printf
、putc
、putchar
、puts
、vfprintf
、およびvprintf
残り 2 つのグループの関数は、<wchar.h> で宣言されます。
ワイド読み取り関数:
fgetwc
、fgetws
、fwscanf
、getwc
、getwchar
、ungetwc
、およびwscanf
、ワイド書き込み関数:
fwprintf
、fputwc
、fputws
、putwc
、putwchar
、vfwprintf
、vwprintf
、wprintf
、
この状態の図は、ほとんどの書き込み操作と読み取り操作の間でいずれかの位置関数を呼び出す必要があることを示しています。
ストリームの最後の操作が書き込みであった場合、読み取り関数を呼び出すことはできません。
ストリームの最後の操作が読み取りであった場合、その読み取り操作でファイルの終わりインジケーターが設定されていない限り、書き込み関数を呼び出すことはできません。
最後に、この状態の図は、位置操作が後に使用できる有効な関数呼び出しの数を減らすことはないことを示しています。