EOT和EOF的区别

use*_*544 13 ascii

我知道 EOT 是 ASCII 码 4,而 EOF 被编码为 -1(至少在 C 中)。在我发现 EOF 映射到 -1 之前,我认为它只是 EOT 的同义词。为什么 EOF 映射到 -1 而不是 EOT?据我所知,它们都做同样的事情,即终止文件流。我能辨别的唯一区别是 EOT 还会终止 bash shell 中的命令。我想描述一下这两个代码之间的精确技术差异。

小智 11

通常,EOF 不是字符;这是一个角色的缺席。

如果程序在具有默认设置的规范模式下在终端上运行(即只使用 stdio 的普通 C 程序),它将永远不会看到 ASCII 字符 EOT。终端驱动程序识别该字符并创建一个 EOF 条件(在低级别是 0 的返回值read())。stdio 库将该 EOF 条件转换为适用于相关函数的返回值(EOF用于的宏、用于getchar()的空指针fgets()等)

EOF除了在 C 库中,宏的数值在任何地方都无关紧要,它不应该影响您对 EOF 条件含义的理解。


Muz*_*zer 5

EOF在 C 的上下文中只是不能出现在文件中的东西。是一个 ASCII 字符,过去表示消息结束(并且是 UNIX 终端中的特殊字符,仅出现在用户输入中时EOT表示流结束),但它可以出现在文件中,因此在 C 中使用它来表示消息结束读取二进制文件时,文件末尾将是一个糟糕的主意!