CLOSE(2)

NOM
close - Fermer un descripteur de fichier

SYNOPSIS
#include <unistd.h>

int close(int fd);

DESCRIPTION
close() ferme le descripteur fd, de manière à ce qu'il ne référence plus aucun fichier, et puisse être réutilisé. Tous les verrouillages (consultez fcntl(2)) sur le fichier qui lui était associé, appartenant au processus, sont supprimés (quel que soit le descripteur qui fut utilisé pour obtenir le verrouillage).

Si fd est le dernier descripteur de fichier qui se réfère à une description de fichier ouvert sous-jacente (consultez open(2)), les ressources associées à la description de fichier ouvert sont libérées. Si le descripteur était la dernière référence sur un fichier supprimé avec unlink(2), le fichier est effectivement effacé.

VALEUR RENVOYÉE
S'il réussit, la fonction close() renvoie zéro. En cas d'erreur, il renvoie -1 et remplit errno avec le code d'erreur.

ERREURS

EBADF
    Le descripteur de fichier fd est invalide.

EINTR
    L'appel système close() a été interrompu par un signal ; consultez signal(7).

EIO Une erreur d'entrée-sortie s'est produite.

CONFORMITÉ
SVr4, BSD 4.3, POSIX.1-2001.

NOTES
Ne pas vérifier la valeur de retour de close() est une pratique courante mais également une grave erreur de programmation. Il est possible qu'une erreur correspondant à un appel write(2) antérieur ne soit rapportée que lors du close() final. Ne pas vérifier la valeur de retour lorsque l'on ferme un fichier peut conduire à une perte silencieuse de données. Ceci est principalement vrai dans le cas de systèmes de fichiers NFS, ou avec l'utilisation des quotas de disques.Notez que la valeur de retour ne devrait être utilisée que pour les diagnostics. En particulier, close() ne doit pas faire l'objet d'une nouvelle tentative après l'erreur EINTR, car cela pourrait entrainer la fermeture d'un decripteur réutilisé par un autre thread.

Une fermeture sans erreur ne garantit pas que les données ont été vraiment écrites sur le disque, car le noyau repousse les écritures le plus tard possible. Il n'est pas fréquent qu'un système de fichiers vide les tampons dès la fermeture d'un flux. Si vous désirez vous assurer que les informations sont en sûreté sur le disque, utilisez fsync(2) (mais des considérations matérielles entrent en jeu à ce moment).

Il est probablement imprudent de fermer des descripteurs de fichier alors qu'ils peuvent peut-être être utilisés par des appels système dans d'autres threads du même processus. Puisqu'un descripteur de fichier peut être réutilisé, il y a des conditions de concurrence obscures qui peuvent provoquer des effets de bord non désirés.

VOIR AUSSI
fcntl(2), fsync(2), open(2), shutdown(2), unlink(2), fclose(3)

COLOPHON
Cette page fait partie de la publication 3.70 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-fr@traduc.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».