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.