Capisco che EOT è codice ASCII 4, mentre EOF è codificato come -1 (almeno in C). Prima di scoprire che EOF è mappato su -1, ho pensato che fosse solo un sinonimo di EOT. Perché EOF è mappato su -1 anziché su EOT? Per quanto ne so, entrambi fanno la stessa cosa, ovvero terminare un flusso di file. L'unica differenza che posso discernere è che EOT termina anche un comando nella shell bash. Vorrei una descrizione delle precise differenze tecniche tra questi due codici.
Risposta accettata:
In generale, EOF non è un personaggio; è l'assenza di un personaggio.
Se un programma viene eseguito su un terminale in modalità canonica con impostazioni predefinite (ovvero un semplice programma C che utilizza solo stdio), non vedrà mai il carattere ASCII EOT. Il driver del terminale riconosce quel carattere e crea una condizione EOF (che al livello basso è un valore di ritorno 0 da read()
). La libreria stdio traduce quella condizione EOF nel valore restituito appropriato per la funzione in questione (l'EOF
macro per getchar()
, un puntatore nullo per fgets()
, ecc.)
Il valore numerico di EOF
la macro non ha rilevanza da nessuna parte tranne che nella libreria C e non dovrebbe influenzare la tua comprensione del significato della condizione EOF.