| close | |||
Nomclose - Fermer un descripteur de fichier.Synopsis#include <unistd.h> int close(int fd); Descriptionclose ferme le descripteur fd, de manière à ce qu'il ne référence plus aucun fichier, et puisse être réutilisé.Si fd est la dernière copie d'un descripteur de fichier donné, les ressources qui lui sont associées sont libérées. Par exemple tous les verrouillages sont supprimés et si le descripteur etait la dernière référence sur un fichier supprimé avec unlink(2) , le fichier est effectivement effacé. Valeur Renvoyéeclose renvoie 0 s'il réussit, ou -1 en cas d'échec, auquel cas errno contient le code d'erreur.Erreurs
ConformitéSVr4, SVID, POSIX, X/OPEN, BSD 4.3. SVr4 documente une condition d'erreur supplémentaire ENOLINK.NotesNe pas vérifier la valeur de retour de close est une pratique courante mais également une grave erreur de programmation. Les systèmes de fichiers utilisant des techniques d'écriture différée pour augmenter les performances peuvent conduire à des situations où write(2) semble reussir bien que les données n'aient pas encore été réellement écrites.Une erreur se produisant lors de l'écriture physique peut être éventuellement rapportée lors d'un write ultérieur, mais est surtout garantie lors de la fermeture du fichier. 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, il faut employer fsync(2) ou sync(2) qui vous rapprocherons de votre but (mais des considérations matérielles entrent en jeu à ce moment). Voir Aussiopen(2) , fcntl(2) , shutdown(2) , unlink(2) , fclose(3) .
TraductionChristophe Blaess, 1997.
|