Chápu, že EOT je kód ASCII 4, zatímco EOF je kódován jako -1 (alespoň v C). Než jsem zjistil, že EOF je namapován na -1, myslel jsem si, že je to jen synonymum pro EOT. Proč je EOF mapován na -1 spíše než EOT? Pokud mohu říci, oba dělají totéž, což je ukončení toku souborů. Jediný rozdíl, který vidím, je ten, že EOT také ukončuje příkaz v bash shellu. Chtěl bych popsat přesné technické rozdíly mezi těmito dvěma kódy.
Přijatá odpověď:
Obecně platí, že EOF není postava; je to nepřítomnost postavy.
Pokud program běží na terminálu v kanonickém režimu s výchozím nastavením (tj. prostý program v C, který používá pouze stdio), nikdy neuvidí znak EOT ASCII. Ovladač terminálu rozpozná tento znak a vytvoří podmínku EOF (což je na nízké úrovni návratová hodnota 0 z read()
). Knihovna stdio převádí tuto podmínku EOF na návratovou hodnotu, která je vhodná pro danou funkci (EOF
makro pro getchar()
, nulový ukazatel pro fgets()
, atd.)
Číselná hodnota EOF
makro nemá žádný význam jinde než v knihovně C a nemělo by ovlivnit vaše chápání významu podmínky EOF.