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  alternative  plus  rapide  et  plus  fiable  (surtout  sur
       d'autres systèmes que Linux) si l'on dispose de suffisamment 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'efforceront 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émentation (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 <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.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
       <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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 à ⟨debian-l10n-french@lists.debian.org⟩.