table of contents
GETCWD(3) | Manuel du programmeur Linux | GETCWD(3) |
NOM¶
getcwd, getwd, get_current_dir_name - Obtenir le répertoire de travail actuel
SYNOPSIS¶
#include <unistd.h>
char *getcwd(char *buf, size_t size);
char *getwd(char *buf);
char *get_current_dir_name(void);
Exigences de macros de test de fonctionnalités pour la glibc (consulter
feature_test_macros(7)) :
get_current_dir_name() :
getwd() :
- Depuis la glibc 2.12 :
-
(_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200809L)
|| /* Depuis la glibc 2.19 : */ _DEFAULT_SOURCE
|| /* Versions de la glibc versions <= 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.
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 que son dossier actuel ne soit transféré dans cette racine), depuis Linux 2.6.36, le chemin renvoyé par l'appel système getcwd() sera préfixé par la chaîne « (unreachable) ». 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. Ce n'est plus vrai dans certaines bibliothèques C ; voir les NOTES.
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 courant. 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 |
CONFORMITɶ
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, la fonction getcwd() est un appel système (depuis la version 2.1.92). Sur des systèmes plus anciens, elle interrogeait /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.
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.
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.
VOIR AUSSI¶
pwd(1), chdir(2), fchdir(2), open(2), unlink(2), free(3), malloc(3)
COLOPHON¶
Cette page fait partie de la publication 4.16 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.
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.
30 avril 2018 | GNU |