Provided by: manpages-fr-dev_4.21.0-2_all bug

NOM

       getcwd, getwd, get_current_dir_name - Obtenir le répertoire de travail actuel

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <unistd.h>

       char *getcwd(char buf[.size], size_t size);
       char *get_current_dir_name(void);

       [[obsolète]] char *getwd(char buf[PATH_MAX]);

   Exigences de macros de test de fonctionnalités 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 chaîne terminée par un octet NULL contenant un chemin absolu correspondant au
       répertoire  de  travail actuel du processus appelant. Le chemin est renvoyé comme résultat de la fonction
       et par le paramètre buf, s'il est présent.

       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  la taille du chemin absolu du répertoire de travail en cours, octet NULL de fin compris, dépasse size
       octets, la fonction renvoie NULL et errno contient le code d'erreur ERANGE. Une application doit détecter
       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 alloué a une taille de size sauf si
       size vaut zéro, auquel cas buf est alloué avec la taille nécessaire. L'appelant doit libérer avec free(3)
       le tampon renvoyé.

       get_current_dir_name() allouera avec malloc(3) une chaîne suffisamment grande pour  contenir  le  nom  du
       chemin  absolu  du  répertoire  de travail courant. Si la variable d'environnement PWD est configurée, et
       correcte, cette valeur sera renvoyée. L'appelant doit libérer avec free(3) le tampon renvoyé.

       getwd() n'allouera aucune mémoire (avec malloc(3)). Le paramètre buf doit être un pointeur sur une chaîne
       comportant au moins PATH_MAX octets. Si la longueur du chemin absolu du  répertoire  de  travail  actuel,
       caractère  NULL  de  fin  compris,  dépasse  PATH_MAX  octets,  NULL est renvoyé et errno prend la valeur
       ENAMETOOLONG. Notez que sur certains systèmes, PATH_MAX peut ne  pas  être  une  constante  connue  à  la
       compilation ;  de  plus,  sa valeur peut dépendre du système de fichiers, consultez pathconf(3). Pour des
       raisons de portabilité et de sécurité, l'utilisation de getwd() est déconseillée.

VALEUR RENVOYÉE

       En cas de succès, ces fonctions renvoient un pointeur vers une chaîne contenant le chemin  du  répertoire
       de travail actuel. Dans le cas de getcwd() et getwd() il s'agit de la même valeur que buf.

       En  cas  d'échec, ces fonctions renvoient NULL, et remplissent errno avec le code d'erreur. 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.

       EINVAL getwd() : buf est NULL.

       ENAMETOOLONG
              getwd() : La taille de la chaîne, terminée par un octet NULL, du chemin  absolu  dépasse  PATH_MAX
              octets.

       ENOENT Le répertoire en cours a été supprimé.

       ENOMEM Plus assez de mémoire.

       ERANGE Le  paramètre  size  est inférieur à la longueur du nom du chemin absolu du répertoire de travail,
              caractère NULL de fin compris. Allouez un tampon plus grand et réessayez.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).
       ┌──────────────────────────────────────────────────────────────────┬──────────────────────┬─────────────┐
       │ InterfaceAttributValeur      │
       ├──────────────────────────────────────────────────────────────────┼──────────────────────┼─────────────┤
       │ getcwd(), getwd()                                                │ Sécurité des threads │ MT-Safe     │
       ├──────────────────────────────────────────────────────────────────┼──────────────────────┼─────────────┤
       │ get_current_dir_name()                                           │ Sécurité des threads │ MT-Safe env │
       └──────────────────────────────────────────────────────────────────┴──────────────────────┴─────────────┘

STANDARDS

       getcwd() se conforme à POSIX.1-2001. Notez cependant que POSIX.1-2001 laisse le comportement de  getcwd()
       non spécifié si buf est NULL.

       getwd() est présent dans POSIX.1-2001, mais marquée « LEGACY ». POSIX.1-2008 supprime la spécification de
       getwd() et POSIX.1-2001 ne définit aucune erreur pour getwd(). Utilisez getcwd() à la place.

       get_current_dir_name() est une extension GNU.

NOTES

       Sous  Linux,  ces  fonctions utilisent l'appel système getcwd() (disponible depuis Linux 2.1.92). Sur des
       systèmes plus anciens, elles interrogeaient /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 échoue en
       renvoyant EACCES sous Linux.

       Ces  fonctions  sont  souvent  utilisées  pour sauvegarder 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 al‐
       ternative plus rapide et plus fiable (surtout sur d'autres systèmes que Linux) si l'on dispose de  suffi‐
       samment de descripteurs de fichier.

   Différences entre bibliothèque C et noyau
       Sur Linux, le noyau fournit un appel système getcwd() que les fonctions décrites dans cette page s'effor‐
       ceront  d'utiliser.  L'appel  système  prend les mêmes paramètres que les fonctions de la bibliothèque du
       même nom, mais il se limite à envoyer tout au plus PATH_MAX octets (avant Linux 3.12, la limite de taille
       du chemin renvoyé était celle de la page du système. Sur de  nombreuses  architectures,  PATH_MAX  et  la
       taille  de la page du système valent 4096 octets, mais certaines architectures ont une page plus grande).
       Si la taille du chemin du répertoire de travail actuel dépasse cette limite, l'appel système échoue  avec
       l'erreur ENAMETOOLONG. Dans ce cas, les fonctions de la bibliothèque se rabattent sur une autre implémen‐
       tation (plus lente) qui renvoie tout le chemin.

       Suite  à un changement dans Linux 2.6.36, le chemin renvoyé par l'appel système getcwd() sera préfixé par
       la chaîne « (unreachable) » si le répertoire actuel ne se situe pas sous la racine  du  processus  actuel
       (par exemple parce que le processus a défini un nouveau système de fichiers racine en utilisant chroot(2)
       sans  transférer  son dossier actuel dans cette racine). Un tel comportement peut aussi être causé par un
       utilisateur non privilégié qui va du répertoire actuel vers un autre espace de noms de montage. Quand ils
       ont affaire à un chemin issu de sources non fiables, les appelants des fonctions décrites dans cette page
       doivent envisager de vérifier si le chemin renvoyé commence par « / » ou « ( » pour éviter  d'interpréter
       à tort un chemin non atteignable comme un chemin relatif.

BOGUES

       Depuis  une  modification  dans Linux 2.6.36, qui a ajouté « (unreachable) », getcwd() de la glibc échoue
       pour se conformer à POSIX et renvoie un chemin relatif quand l'API a besoin d'un chemin absolu. Depuis la
       glibc 2.27, c'est corrigé ; l'appel getcwd() à partir d'un tel endroit échouera avec ENOENT.

VOIR AUSSI

       pwd(1), chdir(2), fchdir(2), open(2), unlink(2), free(3), malloc(3)

TRADUCTION

       La  traduction  française   de   cette   page   de   manuel   a   été   créée   par   Christophe   Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>,  Thierry Vignaud <tvi‐
       gnaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe  Guérard  <fe‐
       vrier@tigreraye.org>,  Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@de‐
       bian.org>,  Thomas  Huriaux  <thomas.huriaux@gmail.com>,   Nicolas   François   <nicolas.francois@centra‐
       liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
       Denis  Barbier  <barbier@debian.org>,  David  Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmen‐
       gual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous  reporter  à  la  GNU General Public License
       version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si  vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à de‐
       bian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.03                    5 février 2023                                        getcwd(3)