GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unterschied zwischen Eot und Eof?

Ich verstehe, dass EOT ASCII-Code 4 ist, während EOF als -1 codiert ist (zumindest in C). Bevor ich herausfand, dass EOF auf -1 abgebildet wird, dachte ich, es sei nur ein Synonym für EOT. Warum wird EOF auf -1 und nicht auf EOT abgebildet? Soweit ich das beurteilen kann, machen beide dasselbe, nämlich einen Dateistream zu beenden. Der einzige Unterschied, den ich erkennen kann, ist, dass EOT auch einen Befehl in der Bash-Shell beendet. Ich hätte gerne eine Beschreibung der genauen technischen Unterschiede zwischen diesen beiden Codes.

Akzeptierte Antwort:

Im Allgemeinen ist EOF kein Charakter; es ist das Fehlen eines Zeichens.

Wenn ein Programm auf einem Terminal im kanonischen Modus mit Standardeinstellungen läuft (d. h. ein einfaches C-Programm, das nur stdio verwendet), wird es niemals das ASCII-Zeichen EOT sehen. Der Terminaltreiber erkennt dieses Zeichen und erstellt eine EOF-Bedingung (die auf der niedrigen Ebene ein 0-Rückgabewert von read() ist ). Die stdio-Bibliothek übersetzt diese EOF-Bedingung in den Rückgabewert, der für die betreffende Funktion geeignet ist (der EOF Makro für getchar() , ein Nullzeiger für fgets() usw.)

Der numerische Wert des EOF Makro ist nirgendwo anders als in der C-Bibliothek relevant und sollte Ihr Verständnis der Bedeutung der EOF-Bedingung nicht beeinflussen.


Linux
  1. Unterschied zwischen Login-Shell und Nicht-Login-Shell?

  2. Unterschied zwischen 2>&-, 2>/dev/null, |&, &>/dev/null und>/dev/null 2>&1?

  3. Was ist der Unterschied zwischen Sudo Su – und Sudo Su –?

  4. Unterschied zwischen [0-9], [[:digit:]] und D?

  5. Unterschied zwischen Gtk- und Qt-Anwendungen?

Unterschied zwischen apt und apt-get erklärt

Unterschied zwischen Qemu und KVM

Unterschied zwischen $HOME und '~' (Tilde)?

unterschied zwischen netstat und ss unter linux?

Unterschied zwischen ${} und $() in Bash

Unterschied zwischen Cgroups und Namespaces