getcwd(3) Library Functions Manual getcwd(3) NOM getcwd, getwd, get_current_dir_name - Obtenir le repertoire de travail actuel BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include char *getcwd(char buf[.size], size_t size); char *get_current_dir_name(void); [[obsolete]] char *getwd(char buf[PATH_MAX]); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : get_current_dir_name() : _GNU_SOURCE getwd() : Depuis la glibc 2.12: (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200809L) || /* glibc >= 2.19 : */ _DEFAULT_SOURCE || /* glibc <= 2.19 : */ _BSD_SOURCE Avant la glibc 2.12 : _BSD_SOURCE || _XOPEN_SOURCE >= 500 DESCRIPTION Ces fonctions renvoient une chaine terminee par un octet NULL contenant un chemin absolu correspondant au repertoire de travail actuel du processus appelant. Le chemin est renvoye comme resultat de la fonction et par le parametre buf, s'il est present. La fonction getcwd() copie le chemin d'acces absolu du repertoire de travail courant dans la chaine pointee par buf, qui est de longueur size. Si la taille du chemin absolu du repertoire de travail en cours, octet NULL de fin compris, depasse size octets, la fonction renvoie NULL et errno contient le code d'erreur ERANGE. Une application doit detecter cette erreur et allouer un tampon plus grand si besoin est. En tant qu'extension de la norme POSIX.1-2001, la version de la glibc de getcwd() alloue le tampon dynamiquement avec malloc(3) si buf est NULL. Dans ce cas, le tampon alloue a une taille de size sauf si size vaut zero, auquel cas buf est alloue avec la taille necessaire. L'appelant doit liberer avec free(3) le tampon renvoye. get_current_dir_name() allouera avec malloc(3) une chaine suffisamment grande pour contenir le nom du chemin absolu du repertoire de travail courant. Si la variable d'environnement PWD est configuree, et correcte, cette valeur sera renvoyee. L'appelant doit liberer avec free(3) le tampon renvoye. getwd() n'allouera aucune memoire (avec malloc(3)). Le parametre buf doit etre un pointeur sur une chaine comportant au moins PATH_MAX octets. Si la longueur du chemin absolu du repertoire de travail actuel, caractere NULL de fin compris, depasse PATH_MAX octets, NULL est renvoye et errno prend la valeur ENAMETOOLONG. Notez que sur certains systemes, PATH_MAX peut ne pas etre une constante connue a la compilation ; de plus, sa valeur peut dependre du systeme de fichiers, consultez pathconf(3). Pour des raisons de portabilite et de securite, l'utilisation de getwd() est deconseillee. VALEUR RENVOYEE En cas de succes, ces fonctions renvoient un pointeur vers une chaine contenant le chemin du repertoire de travail actuel. Dans le cas de getcwd() et getwd() il s'agit de la meme valeur que buf. En cas d'echec, ces fonctions renvoient NULL, et remplissent errno avec le code d'erreur. Le contenu de la chaine pointee par buf est indefini en cas d'erreur. ERREURS EACCES Impossible de lire ou de parcourir un composant du chemin d'acces. EFAULT buf pointe sur une adresse illegale. EINVAL L'argument size vaut zero et buf n'est pas un pointeur NULL. EINVAL getwd() : buf est NULL. ENAMETOOLONG getwd() : La taille de la chaine, terminee par un octet NULL, du chemin absolu depasse PATH_MAX octets. ENOENT Le repertoire en cours a ete supprime. ENOMEM Plus assez de memoire. ERANGE Le parametre size est inferieur a la longueur du nom du chemin absolu du repertoire de travail, caractere NULL de fin compris. Allouez un tampon plus grand et reessayez. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +-----------------------------+--------------------------+-------------+ |Interface | Attribut | Valeur | +-----------------------------+--------------------------+-------------+ |getcwd(), getwd() | Securite des threads | MT-Safe | +-----------------------------+--------------------------+-------------+ |get_current_dir_name() | Securite des threads | MT-Safe env | +-----------------------------+--------------------------+-------------+ VERSIONS POSIX.1-2001 ne specifie pas le comportement de getcwd() si buf est NULL. POSIX.1-2001 ne definit aucune erreur pour getwd(). VERSIONS Differences entre bibliotheque C et noyau Sur Linux, le noyau fournit un appel systeme getcwd() que les fonctions decrites dans cette page s'efforceront d'utiliser. L'appel systeme prend les memes parametres que les fonctions de la bibliotheque du meme nom, mais il se limite a envoyer tout au plus PATH_MAX octets (avant Linux 3.12, la limite de taille du chemin renvoye etait celle de la page du systeme. Sur de nombreuses architectures, PATH_MAX et la taille de la page du systeme valent 4096 octets, mais certaines architectures ont une page plus grande). Si la taille du chemin du repertoire de travail actuel depasse cette limite, l'appel systeme echoue avec l'erreur ENAMETOOLONG. Dans ce cas, les fonctions de la bibliotheque se rabattent sur une autre implementation (plus lente) qui renvoie tout le chemin. Suite a un changement dans Linux 2.6.36, le chemin renvoye par l'appel systeme getcwd() sera prefixe par la chaine << (unreachable) >> si le repertoire actuel ne se situe pas sous la racine du processus actuel (par exemple parce que le processus a defini un nouveau systeme de fichiers racine en utilisant chroot(2) sans transferer son dossier actuel dans cette racine). Un tel comportement peut aussi etre cause par un utilisateur non privilegie qui va du repertoire actuel vers un autre espace de noms de montage. Quand ils ont affaire a un chemin issu de sources non fiables, les appelants des fonctions decrites dans cette page doivent envisager de verifier si le chemin renvoye commence par << / >> ou << ( >> pour eviter d'interpreter a tort un chemin non atteignable comme un chemin relatif. STANDARDS getcwd() POSIX.1-2008. get_current_dir_name() GNU. getwd() Aucun. HISTORIQUE getcwd() POSIX.1-2001. getwd() POSIX.1-2001, mais marque comme LEGACY. Supprime dans POSIX.1-2008. Utilisez plutot getcwd(). Sous Linux, ces fonctions utilisent l'appel systeme getcwd() (disponible depuis Linux 2.1.92). Sur des systemes plus anciens, elles interrogeaient /proc/self/cwd. Si l'appel systeme et le systeme de fichiers proc sont absents, une implementation generique est utilisee. Dans ce cas seulement la fonction echoue en renvoyant EACCES sous Linux. NOTES Ces fonctions sont souvent utilisees pour sauvegarder le repertoire de travail afin d'y revenir plus tard. Ouvrir le repertoire courant (<< . >>) et appeler fchdir(2) pour y revenir est habituellement une alternative plus rapide et plus fiable (surtout sur d'autres systemes que Linux) si l'on dispose de suffisamment de descripteurs de fichier. BOGUES Depuis une modification dans Linux 2.6.36, qui a ajoute << (unreachable) >>, getcwd() de la glibc echoue pour se conformer a POSIX et renvoie un chemin relatif quand l'API a besoin d'un chemin absolu. Depuis la glibc 2.27, c'est corrige ; l'appel getcwd() a partir d'un tel endroit echouera avec ENOENT. VOIR AUSSI pwd(1), chdir(2), fchdir(2), open(2), unlink(2), free(3), malloc(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 getcwd(3)