En informática , el fin de archivo ( EOF ) [1] es una condición en un sistema operativo de computadora en la que no se pueden leer más datos de una fuente de datos. La fuente de datos generalmente se denomina archivo o flujo .
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 normalmente es −1, como en glibc [2] ). Las funciones de lectura de bloques devuelven la cantidad de bytes leídos y, si es menor que la solicitada, se llegó al final del archivo o se produjo un error (se requiere la comprobación de errno
una función dedicada, como la que ferror
se necesita para determinar cuál).
La entrada desde un terminal nunca "termina" realmente (a menos que el dispositivo esté desconectado), pero es útil ingresar más de un "archivo" en un 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 manera 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 de "comillas" (generalmente Control-V ). AmigaDOS es similar, pero utiliza 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 un terminal (u otro "dispositivo de caracteres") e interpretan un carácter o secuencia reservada dada como un indicador de fin de archivo; lo más común es un Control-Z ASCII , código 26. Algunos programas MS-DOS, incluidas partes del shell Microsoft MS-DOS ( COMMAND.COM ) y programas de utilidad del sistema operativo (como EDLIN ), tratan un Control-Z en un archivo de texto como si marcara el final de datos significativos y/o agregan un Control-Z al final cuando se escribe 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 0x13
(hexadecimal) para cintas de nueve pistas y 017
(octal) para cintas de siete pistas . [5] El final de la cinta , comúnmente abreviado como EOT , se indicaba mediante dos marcas de cinta. Este era el estándar utilizado, por ejemplo, en IBM 360. La banda reflectante que se usaba para anunciar el final físico inminente de la cinta también se llamaba marcador EOT .