Stati di flusso
Gli stati validi e le transizioni di stato, per un flusso vengono illustrati nella figura seguente.
Ognuno dei cerchi indica uno stato stabile. Ognuna delle righe indica una transizione che può verificarsi come risultato di una chiamata di funzione che opera nel flusso. Cinque gruppi di funzioni possono causare le transizioni di stato.
Le funzioni nei primi tre gruppi vengono dichiarate in <stdio.h>:
Le funzioni che leggono byte - fgetc, fgets, fread, fscanf, getc, getchar, ottiene, scanf e ungetc
Le funzioni che scrivono byte - mentre, fputc, fputs, fwrite, printf, putc, putchar, inserisce, vfprintf e vprintf
Le funzioni di posizionamento fflush, fseek, fsetpos e rewind
Le funzioni nei due gruppi rimanenti vengono dichiarate in <wchar.h>:
Le funzioni di lettura di caratteri wide - fgetwc, fgetws, fwscanf, getwc, getwchar, ungetwc e wscanf,
Le funzioni di scrittura di caratteri wide - fwprintf, fputwc, fputws, putwc, putwchar, vfwprintf, vwprintf e wprintf,
Il diagramma di stato indica che è necessario chiamare una delle funzioni di posizionamento nella maggior parte delle operazioni di lettura e scrittura:
Non è possibile chiamare una funzione di lettura se l'ultima operazione sul flusso è stata di scrittura.
Non è possibile chiamare una funzione di scrittura se l'ultima operazione sul flusso è stata di lettura, a meno che tale operazione di lettura imposti l'indicatore di fine file.
Infine, il diagramma di stato mostra che un'operazione di posizionamento non riduce mai il numero di chiamate di funzione valide che possono seguire.