EOF (abreviatura de end-of-file, fin de fichero en inglés) es un indicador o marca de que no hay más información que recuperar de una fuente de datos. La fuente de datos puede ser un fichero o un flujo de datos (stream). Conceptualmente en caso de un fichero indica que se llegó al final del mismo, en caso de un stream es que se finalizó la transmisión o transferencia de datos.
A nivel sistema operativo, el indicador de fin de archivo es dependiente del sistema de archivos donde se encuentre almacenado el fichero o el protocolo de transmisión asociado al stream. Por ejemplo, FAT 16 tiene como indicador de fin de archivo el valor FFF8-FFFFh, otro ejemplo puede ser el protocolo FTP, en modo de transferencia por flujo (STREAM Mode) el indicador de fin de archivo (o de flujo) se representa por dos bytes, el primero son todos unos, y el segundo byte es todos en cero excepto bit de posición 2 (en hexa 02h).
En programación, EOF es un concepto para determinar el final de un archivo. Muchos lenguajes de programación tienen formas de detectar el final de archivo como condicionante para la lectura de un flujo de datos.
Algunos ejemplos:
/* Ejemplo en C */
/* Se abre el archivo o stream y demas tareas... */
....
/* Se procede a la lectura */
while (!feof(&fd))
{
/* Leyendo hasta que se termine */
...
}
/* Ejemplo en C++ */
/* Se abre el archivo o stream y demas tareas... */
....
/* Se procede a la lectura */
while (!fd.eof())
{
/* Leyendo hasta que se termine */
...
}
El carácter EOF existe en la tabla ASCII aunque no es este el carácter que indica el fin-de-archivo en la fuente de datos, ya que un fichero no contiene como último byte el carácter EOF.
En la biblioteca estándar de C, el acceso a un fichero y otras funciones I/O pueden devolver un valor igual al simbólico EOF para indicar que la condición end-of-file se ha cumplido. Ej:
/* Ejemplo en C */
/* Se abre el archivo o stream y demas tareas... */
....
/* Se procede a la lectura */
while (!feof(&fd))
{
/* Leyendo hasta que se termine */
op_result = fread ((void*)buffer, sizeof(int), 1, &fd);
/* Chequeamos el resultado de la operacion */
if (op_result == EOF)
break;
/* Se trabaja con el buffer */
.....
}
La interpretación de C como resultado de la operación de lectura en caso de ser EOF es, por lo general, -1.
En UNIX se puede generar un EOF desde el shell (consola) tecleando Ctrl+D para indicar el EOF de datos ingresados por teclado, así como en Microsoft DOS y Windows se genera mediante la combinación Ctrl+Z.