Infine gli stream, qualunque uso ne sia stato fatto, devono essere prima "puliti" e poi chiusi, questo si può fare comodamente con le funzioni fflush e fclose, formalizzate come segue:
fflush(FILE *stream);
fclose(FILE *stream);
Il seguente programma C chiarirà meglio l'uso delle funzioni spiegate per operare su file; infatti simuleremo un input da tastiera che verrà scritto su un file insieme ad un testo predefinito e che verrà appeso al testo già presente nel file:
#include <stdio.h>
int main()
{
char miastringa[40];
FILE *stream = fopen("miofile.txt","a");
printf("Inserisci meno di 40 caratteri -> ");
fscanf(stdin, "%s", miastringa);
fprintf(stream, "La mia stringa e' : %sn", miastringa);
fflush(stream);
fclose(stream);
}
Le ultime funzioni che operano su file servono principalmente per eseguire operazioni di debug, le quali sarebbero difficili da implementare in maniera proprietaria:
int feof(FILE *stream);
int ferror(FILE *stream);
void clearerr(FILE *stream);
int fileno(FILE *stream);
il cui uso viene chiarito qui sotto:
- feof() - Ritorna un valore vero (true) se lo stream raggiunge la fine del file;
- ferror() - Riporta uno stato di errore dello stream e ritorna vero (true) se ne incontra uno;
- clearerr() - Cancella le indicazioni di errore per un dato stream;
- fileno() - Ritorna il descrittore di file intero associato con lo stream.