Entiendo que EOT es el código ASCII 4, mientras que EOF está codificado como -1 (al menos en C). Antes de descubrir que EOF está asignado a -1, pensé que era solo un sinónimo de EOT. ¿Por qué EOF se asigna a -1 en lugar de EOT? Por lo que puedo decir, ambos hacen lo mismo, que es terminar un flujo de archivos. La única diferencia que puedo discernir es que EOT también finaliza un comando en el shell bash. Me gustaría una descripción de las diferencias técnicas precisas entre estos dos códigos.
Respuesta aceptada:
Generalmente, EOF no es un personaje; es la ausencia de un personaje.
Si un programa se ejecuta en un terminal en modo canónico con la configuración predeterminada (es decir, un programa C simple que solo usa stdio), nunca verá el carácter ASCII EOT. El controlador de terminal reconoce ese carácter y crea una condición EOF (que en el nivel bajo es un valor de retorno 0 de read()
). La biblioteca stdio traduce esa condición EOF en el valor de retorno que es apropiado para la función en cuestión (el EOF
macro para getchar()
, un puntero nulo para fgets()
, etc)
El valor numérico del EOF
La macro no tiene relevancia en ningún lugar excepto en la biblioteca C, y no debería influir en su comprensión del significado de la condición EOF.