close(2) cierra un descriptor de fichero

SINOPSIS

#include <unistd.h>


int close(int fd);

DESCRIPCIÓN

close cierra un descriptor de fichero de forma que ya no se refiera a fichero alguno y pueda ser reutilizado. Cualesquiera bloqueos mantenidos sobre el fichero con el que estaba asociado, y propiedad del proceso, son eliminados (sin importar qué descriptor de fichero fue utilizado para obtener el bloqueo).

Si fd es la última copia de cierto descriptor de fichero, los recursos asociados con dicho descriptor son liberados; si el descriptor fuera la última referencia a un fichero que haya sido eliminada mediante unlink(2) entonces el fichero es borrado.

VALOR DEVUELTO

close devuelve 0 en caso de éxito y -1 si ocurre algún error.

ERRORES

EBADF
fd no es un descriptor de fichero abierto válido.
EINTR
La llamada close() fue interrumpida por una señal.
EIO
Ocurrió un error de E/S.

CONFORME A

SVID, AT&T, POSIX, X/OPEN, BSD 4.3. SVr4 documenta una condición de error ENOLINK adicional.

NOTA

El no comprobar el valor devuelto por close es un error de programación común y no obstante serio. Es bastante posible que los errores de una operación write(2) previa sean informados por primera vez con la última llamada close.

Una llamada a close con éxito no garantiza que los datos hayan sido guardados a disco con éxito, ya que el núcleo aplaza las escrituras. No es habitual en un sistema de ficheros vaciar los buffers cuando se cierra el flujo de datos. Si necesita asegurarse de que los datos sean físicamente almacenados use fsync(2). (Ésto dependerá del hardware de disco.) No comprobar el valor devuelto cuando se cierra un fichero puede dar lugar a una pérdida silenciosa de datos. Esto se observa especialmente en NFS y con las cuotas de discos.