Concetti Chiave
- Nel linguaggio C, gli stream di dati rappresentano operazioni di input e output uniformi su file e device fisici.
- La struttura di uno stream, definita come file, consente operazioni di apertura, chiusura, lettura e scrittura tramite la libreria stdio.h.
- Esistono tre stream standard in un programma C: stdin per l'input, stdout per l'output e stderr per i messaggi di errore, tutti di tipo puntatore alla struttura file.
- La libreria stdio include funzioni per gestire gli stream, come apertura, chiusura, lettura, scrittura e sincronizzazione con i device associati.
- Gli stream testuali e binari sono trattati in modo diverso su diverse piattaforme, con il primo che gestisce la conversione dei caratteri speciali su alcune di esse.
Gestione degli stream di dati
Nel linguaggio C le operazioni di input e output sono gestite come operazioni su stream di dati (flusso di dati).
Uno stream di dati viene gestito in modo uniforme con l’astrazione file, sia con device fisici che con dati su memoria di massa. L’astrazione dei file permette di gestire le operazioni senza considerare le caratteristiche fisiche dei device con cui sono effettuate.
Possono esserci due forme di stream:
- Stream di dati testuali: sequenza ordinata di caratteri organizzati in righe terminate da \n
- Stream di dati binari: sequenza di caratteri
Questi due stream vengono letti come equivalenti su sistemi Unix, su altre piattaforme invece lo stream testuale gestisce in modo trasparente la conversione dei caratteri speciali inseriti in un file di testo.
Struttura e funzioni dei file
La struttura dei dati di uno stream è chiamata file, che non rappresenta per forza un file su memoria di massa.
Le dichiarazioni di tipo file e prototipi di I/O sono definiti in stdio.h.
Il tipo di dato file è una struttura (identificatore dichiarato usando typedef). Questa struttura contiene una lista di campi che permette le operazioni di apertura, chiusura, lettura, scrittura dei file.
La struttura interna dipende dall’implementazione. Si dovrebbero usare le funzioni di libreria fornite, senza accedere direttamente ai campi interni della struttura. Le funzioni che usano i file hanno come argomenti dei puntatori alla struttura file.
Stream standard e loro utilizzo
Ci sono tre stream standard aperti di default in un programma in esecuzione :
- Standard input: stdin da tastiera. È uno stream aperto, viene utilizzato solo in lettura.
- Standard output: stdout da monitor. Per stampare messaggi di errore.
- Standard error: stderr da monitor. Per stampare messaggi di errore.
Queste tre variabili sono di tipo puntatore alla struttura file.
Stdout e stderr possono essere rediretti separatamente, permettendo di distinguere l’output dai messaggi di errore.
Funzioni della libreria stdio
La libreria stdio, oltre alla definizione di file, contiene diverse funzioni per poter lavorare con stream di dati
- Funzioni per apertura e chiusura di uno stream
- Funzioni per la scrittura di dati
- Funzioni per lettura di dati
- Funzione per sincronizzazione di uno stream di output con device associato: fflush()
- Funzione di posizionamento all’interno del file: ftell(), fseek(), fgetpos(), rewind()
- Funzioni per gestione di errori: ferror(), perror(), feof(), clearerr()
Domande da interrogazione
- Qual è la differenza tra stream di dati testuali e binari nel linguaggio C?
- Qual è la struttura dei dati di uno stream in C e dove sono definite le relative funzioni?
- Quali sono gli stream standard disponibili in un programma C e il loro utilizzo?
- Quali funzioni offre la libreria stdio per lavorare con gli stream di dati?
Gli stream di dati testuali sono sequenze ordinate di caratteri organizzati in righe terminate da \n, mentre gli stream di dati binari sono semplicemente sequenze di caratteri. Su sistemi Unix, questi due tipi di stream vengono letti come equivalenti, ma su altre piattaforme lo stream testuale gestisce la conversione dei caratteri speciali in modo trasparente.
La struttura dei dati di uno stream è chiamata file, che non deve necessariamente rappresentare un file su memoria di massa. Le dichiarazioni di tipo file e i prototipi di I/O sono definiti in stdio.h, e il tipo di dato file è una struttura che consente operazioni di apertura, chiusura, lettura e scrittura.
In un programma C ci sono tre stream standard aperti di default: stdin (input da tastiera), stdout (output su monitor) e stderr (messaggi di errore su monitor). Questi stream possono essere rediretti separatamente per distinguere l'output dai messaggi di errore.
La libreria stdio fornisce funzioni per l'apertura e la chiusura di uno stream, per la scrittura e la lettura di dati, per la sincronizzazione dello stream di output (fflush()), per il posizionamento all'interno del file (ftell(), fseek(), fgetpos(), rewind()), e per la gestione degli errori (ferror(), perror(), feof(), clearerr()).