getcwd, get_current_dir_name, getwd - Obtenir le répertoire courant.
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 le chemin du répertoire en cours nécessite un buffer plus long que
size
octets, la fonction renvoie
NULL,
et
errno
contient le code d'erreur
ERANGE.
Une application doit détecter cette erreur et allouer un buffer plus grand
si besoin est.
Si
buf
est NULL, le comportement de
getcwd()
est indéfini.
Comme extension du standard POSIX.1, la version Linux (LibC4, LibC5, GlibC) de
getcwd()
alloue le buffer dynamiquement, en utilisant
malloc(),
si
buf
est
NULL
lors de l'appel. Alors, le buffer alloué a la longueur
size
à moins que
size
soit inférieure à zéro, dans ce cas
buf
a la taille nécessaire. Il est possible (et même fortement conseillé) de
libérer le buffer avec
free()
lorsqu'il a été obtenu ainsi.
get_current_dir_name,
qui ne possède un prototype que si la constante
_GNU_SOURCE
est définie, allouera avec
malloc(3)
une chaîne suffisament grande pour contenir le nom du répertoire. Si la
variable d'environnement
PWD
est configurée, et correcte, cette valeur sera renvoyée.
getwd,
qui ne possède un prototype que si les constantes
_BSD_SOURCE
ou
_XOPEN_SOURCE_EXTENDED
sont définies, n'allouera aucune mémoire.
L'argument
buf
doit être un pointeur sur une chaîne comportant au moins
PATH_MAX
octets.
getwd
ne renverra que les
PATH_MAX
premiers octets du nom réel.
Notez que
PATH_MAX
n'est pas nécessairement une constante à la compilation. Elle peut dépendre du
système de fichiers, voire être illimitée. Pour des raisons de portabilité et
de sécuriré, on déconseille l'utilisation de
getwd.
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 suffisament de
descripteurs de fichiers.
Christophe Blaess, 1996-2003.