En informática , el fin de archivo ( EOF ) [1] es una condición en un sistema operativo de computadora donde no se pueden leer más datos de una fuente de datos. La fuente de datos suele denominarse archivo o secuencia .
En la biblioteca estándar de C , las funciones de lectura de caracteres como getchar devuelven un valor igual al valor simbólico (macro) EOF
para indicar que se ha producido una condición de fin de archivo. El valor real de EOF
depende de la implementación y debe ser negativo (pero comúnmente es −1, como en glibc [2] ). Las funciones de lectura de bloques devuelven el número de bytes leídos y, si es menor de lo solicitado, se alcanzó el final del archivo o se produjo un error (comprobación errno
o función dedicada, como ferror
la necesaria para determinar cuál).
La entrada desde una terminal nunca "termina" realmente (a menos que el dispositivo esté desconectado), pero es útil ingresar más de un "archivo" en una terminal, por lo que se reserva una secuencia de teclas para indicar el final de la entrada. En UNIX, la traducción de la pulsación de tecla a EOF la realiza el controlador del terminal, por lo que un programa no necesita distinguir los terminales de otros archivos de entrada. De forma predeterminada, el controlador convierte un carácter Control-D al comienzo de una línea en un indicador de fin de archivo. Para insertar un carácter Control-D (ASCII 04) real en el flujo de entrada, el usuario lo precede con un carácter de comando "comilla" (generalmente Control-V ). AmigaDOS es similar pero usa Control-\ en lugar de Control-D.
En DOS y Windows (y en CP/M y muchos sistemas operativos DEC como el monitor PDP-6 , [3] RT-11 , VMS o TOPS-10 [4] ), la lectura desde el terminal nunca producirá un EOF. En cambio, los programas reconocen que la fuente es una terminal (u otro "dispositivo de caracteres") e interpretan un carácter o secuencia reservada determinada como un indicador de fin de archivo; lo más común es que sea un Control-Z ASCII , código 26. Algunos programas de MS-DOS, incluidas partes del shell de Microsoft MS-DOS ( COMMAND.COM ) y programas de utilidad del sistema operativo (como EDLIN ), tratan un Control-Z en un archivo de texto para marcar el final de datos significativos y/o agregar Control-Z al final al escribir un archivo de texto. Esto se hizo por dos razones:
En el estándar de cinta magnética ANSI X3.27-1969 , el final del archivo se indicaba mediante una marca de cinta , que consistía en un espacio de aproximadamente 3,5 pulgadas de cinta seguido de un solo byte que contenía el carácter 13 (hexadecimal) para nueve pistas. cintas y 17 (octal) para cintas de siete pistas . [5] El final de la cinta , comúnmente abreviado como EOT , estaba indicado por dos marcas de cinta. Este era el estándar utilizado, por ejemplo, en IBM 360 . La tira reflectante que se utilizó para anunciar el inminente fin físico de la cinta también se llamó marcador EOT .