zion - getcwd
Nom
getcwd, get_current_dir_name, getwd - Obtenir le répertoire courant.
Résumé
.nf #include <unistd.h> char * getcwd (char * buf , size_t size ); char * get_current_dir_name (void); char * getwd (char * buf ); .fi
Description
La fonction getcwd () copie le chemin d'accès absolu du répertoire de travail courant dans la chaîne pointée par buf , qui est de longueur size .
Si le chemin du répertoire en cours nécessite un buffer plus long que size octets, la fonction renvoie NULL , et errno contient le code d'erreur ERANGE . Une application doit détecter cette erreur et allouer un buffer plus grand si besoin est.
Si buf est NULL, le comportement de getcwd () est indéfini.
Comme extension du standard POSIX.1, la version Linux (LibC4, LibC5, GlibC) de getcwd() alloue le buffer dynamiquement, en utilisant malloc (), si buf est NULL lors de l'appel. Alors, le buffer alloué a la longueur size à moins que size soit inférieure à zéro, dans ce cas buf a la taille nécessaire. Il est possible (et même fortement conseillé) de libérer le buffer avec free() lorsqu'il a été obtenu ainsi. get_current_dir_name , qui ne possède un prototype que si la constante _GNU_SOURCE est définie, allouera avec malloc (3) une chaîne suffisament grande pour contenir le nom du répertoire. Si la variable d'environnement PWD est configurée, et correcte, cette valeur sera renvoyée. getwd , qui ne possède un prototype que si les constantes _BSD_SOURCE ou _XOPEN_SOURCE_EXTENDED sont définies, n'allouera aucune mémoire. L'argument buf doit être un pointeur sur une chaîne comportant au moins PATH_MAX octets. getwd ne renverra que les PATH_MAX premiers octets du nom réel. Notez que PATH_MAX n'est pas nécessairement une constante à la compilation. Elle peut dépendre du système de fichiers, voire être illimitée. Pour des raisons de portabilité et de sécuriré, on déconseille l'utilisation de getwd .
Valeur renvoyée
NULL en cas d'échec, avec errno contenant le code d'erreur. En cas de réussite buf est renvoyé. Le contenu de la chaîne pointée par buf est indéfini en cas d'erreur.
Erreurs
EACCES
Impossible de lire ou de parcourir un composant du chemin d'accès. |
EFAULT buf
pointe sur une adresse illégale. |
EINVAL
L'argument size vaut zéro et buf n'est pas un pointeur NULL. |
ENOENT
Le répertoire en cours a été supprimé. |
ERANGE
L'argument size est inférieur à la longueur du nom du répertoire. Allouez un buffer plus grand et ré-essayez. |
Notes
Sous Linux, la fonction getcwd () est un appel-système (depuis le 2.1.92). Sur des systèmes plus anciens, elle interrogerait /proc/self/cwd . Si l'appel-système et le système de fichiers proc sont absents, une implémentation générique est utilisée. Dans ce cas seulement la fonction peut renvoyer EACCES sous Linux.
Ces fonctions sont souvent utilisées pour sauver le répertoire de travail afin d'y revenir plus tard. Ouvrir le répertoire courant (".") et appeler fchdir (2) pour y revenir est habituellement une alternative plus rapide et plus fiable (surtout sur d'autres systèmes que Linux) si l'on dispose de suffisament de descripteurs de fichiers.
Conformité
POSIX.1
Voir aussi
chdir (2), fchdir (2), open (2), unlink (2), free (3), malloc (3)
Traduction
Christophe Blaess, 1996-2003.
Poster un commentaire