Linux |
CentOS 4.8 |
|
close(2) |
close − Fermer un descripteur de fichier. |
#include <unistd.h> int close(int fd); |
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 sur le fichier qui lui était associé, appartenant au processus, sont supprimés (quelque soit le descripteur qui fut utilisé pour obtenir le verrouillage). Si fd est la dernière copie d’un descripteur de fichier donné, les ressources qui lui sont associées 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é. |
close renvoie 0 s’il réussit, ou −1 en cas d’échec, auquel cas errno contient le code d’erreur. |
EBADF |
Le descripteur de fichier fd est invalide |
||
EINTR |
L’appel-système close() a été interrompu par un signal. |
||
EIO |
Une erreur d’entrée-sortie s’est produit. |
SVr4, SVID, POSIX, X/OPEN, BSD 4.3. SVr4 documente une condition d’erreur supplémentaire ENOLINK. |
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. |
Une fermeture sans erreur ne garantit pas que les données on é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 buffers 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). |
open(2), fcntl(2), shutdown(2), unlink(2), fclose(3). fsync(3). |
Christophe Blaess, 1997. |
close(2) |