Man page - getcwd(3)

Packages contains this manual

Available languages:

en fr pl ja ru ro de

Manual

getcwd

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
ATTRIBUTS
VERSIONS
VERSIONS
Différences entre bibliothÚque C et noyau
STANDARDS
HISTORIQUE
NOTES
BOGUES
VOIR AUSSI
TRADUCTION

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).

Image grohtml-3872448-1.png

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 .