Provided by: manpages-fr-dev_4.28.0-2_all 

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).
┌──────────────────────────────────────────────────────────────────┬──────────────────────┬─────────────┐
│ Interface │ Attribut │ Valeur │
├──────────────────────────────────────────────────────────────────┼──────────────────────┼─────────────┤
│ getcwd(), getwd() │ Sécurité des threads │ MT-Safe │
├──────────────────────────────────────────────────────────────────┼──────────────────────┼─────────────┤
│ get_current_dir_name() │ Sécurité des threads │ MT-Safe env │
└──────────────────────────────────────────────────────────────────┴──────────────────────┴─────────────┘
VERSIONS
POSIX.1-2001 ne spécifie pas le comportement de getcwd() si buf est NULL.
POSIX.1-2001 ne définit aucune erreur pour getwd().
VERSIONS
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.
STANDARDS
getcwd()
POSIX.1-2008.
get_current_dir_name()
GNU.
getwd()
Aucun.
HISTORIQUE
getcwd()
POSIX.1-2001.
getwd()
POSIX.1-2001, mais marqué comme LEGACY. Supprimé dans POSIX.1-2008. Utilisez plutôt getcwd().
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.
NOTES
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.
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 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.
Pages du manuel de Linux 6.9.1 2 mai 2024 getcwd(3)