GNU/Linux >> Znalost Linux >  >> Linux

Rozdíl mezi Eot a Eof?

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.


Linux
  1. Rozdíl mezi přihlašovacím prostředím a nepřihlašovacím prostředím?

  2. Rozdíl mezi 2>&-, 2>/dev/null, |&, &>/dev/null A>/dev/null 2>&1?

  3. Jaký je rozdíl mezi Sudo Su – a Sudo Su –?

  1. Rozdíl mezi [0-9], [[:digit:]] a D?

  2. Rozdíl mezi velikostí bloku a velikostí clusteru?

  3. Rozdíl mezi potrubím a rozšířením příkazů?

  1. Rozdíl mezi Nss a Pam?

  2. Rozdíl mezi Qemu a KVM

  3. Rozdíl mezi CLOCK_REALTIME a CLOCK_MONOTONIC?