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 (consultez feature_test_macros(7)) :

get_current_dir_name() :
    _GNU_SOURCE

getwd() :
    Depuis la glibc 2.12 :
        _BSD_SOURCE ||
            (_XOPEN_SOURCE >= 500 ||
                _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) &&
            !(_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700)
    Avant la glibc 2.12 : _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
        _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

DESCRIPTION
Ces fonctions renvoient une chaîne terminée par une octet nul 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, caractère nul 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.

Comme une extension de la norme POSIX.1-2001, la version Linux (libc4, libc5, glibc) de getcwd() alloue le tampon dynamiquement avec malloc(3), si buf est NULL. Dans ce cas, le tampon alloué a la longueur size à moins que size soit égal à 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 nul de fin compris, dépasse PATH_MAX octets, NULL est renvoyé et errno prend la valeur ENAMETOOLONG. Notez que sur certains système, PATH_MAX peut ne pas être une constante connue à la compilation ; de plus, sa valeur peut dépendre du système de fichiers, voire être illimitée, 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 en 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 nul, du chemin absolu dépasse PATH_MAX octets.

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

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

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 le 2.1.92). Sur des systèmes plus anciens, elle interrogerait /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 peut renvoyer EACCES sous Linux.

Ces fonctions sont souvent utilisées pour sauver 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
chdir(2), fchdir(2), open(2), unlink(2), free(3), malloc(3)

COLOPHON
Cette page fait partie de la publication 3.70 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-fr@traduc.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».