NAZWA¶
getcwd, get_current_dir_name, getwd - odczytanie bieżącego
katalogu roboczego
SKŁADNIA¶
#include <unistd.h>
char *getcwd(char *buf, size_t size);
char *get_current_dir_name(void);
char *getwd(char *buf);
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
Funkcja
getcwd() kopiuje nazwę bezwzględnej
ścieżki dostępu dla bieżącego katalogu
roboczego do tablicy wskazywanej przez
buf, która to tablica ma
długość
size.
Jeśli nazwa bieżącej bezwzględnej
ścieżki dostępu wymaga bufora dłuższego
niż
size elementów, to zwracane jest
NULL a
errno jest ustawiane na
ERANGE; aplikacja powinna
sprawdzać, czy nie wystąpił ten błąd i
przydzielać większy bufor, jeśli jest to potrzebne.
Jeśli
buf jest równe NULL, zachowanie
getcwd() jest
nieokreślone.
Jako rozszerzenie standardu POSIX.1, linuksowe (libc4, libc5, glibc)
getcwd() przydziela bufor dynamicznie korzystając z
malloc(), jeśli
buf jest równe
NULL podczas
wywołania. W tym przypadku przydzielony bufor ma
długość
size, chyba że
size jest
równe zero. Wówczas dla
buf jest przydzielane tyle, ile
potrzeba. Jest możliwe (i naprawdę zalecane) zwalnianie
otrzymanych w ten sposób buforów za pomocą
free().
get_current_dir_name, które jest jedynie prototypem gdy
_GNU_SOURCE jest zdefiniowane, przydzieli za pomocą
malloc(3) tablicę dostatecznie dużą, aby
przechować nazwę bieżącego katalogu. Jeśli
zmienna środowiskowa
PWD jest ustawiona, a jej
wartość prawidłowa, to zostanie zwrócona ta
wartość.
getwd, które jest jedynie prototypem gdy
_BSD_SOURCE lub
_XOPEN_SOURCE_EXTENDED jest zdefiniowane, nie przydzieli żadnej
pamięci za pomocą
malloc(3). Argument
buf powinien
być wskaźnikiem do tablicy o długości co najmniej
PATH_MAX bajtów.
getwd zwróci jedynie pierwsze
PATH_MAX bajtów nazwy bieżącej
ścieżki dostępu. Należy zwrócić
uwagę, że
PATH_MAX nie musi być
stałą określaną podczas kompilacji; może
ona zależeć od systemu plików, a nawet być
nieograniczona. Ze względu na przenośność i
bezpieczeństwo używanie
getwd nie jest zalecane.
WARTOŚĆ ZWRACANA¶
NULL w przypadku błędu, przy jednoczesnym ustawieniu
errno, a
buf w przypadku pomyślnego zakończenia.
Zawartość tablicy wskazywanej przez
buf w przypadku
błędu jest nieokreślona.
BŁĘDY¶
- EACCES
- Brak praw do odczytu lub przeszukiwania składnika nazwy pliku.
- EFAULT
- buf wskazuje na niewłaściwy adres.
- EINVAL
- Argument size jest zerowy, a buf nie jest wskaźnikiem
NULL.
- ENOENT
- Bieżący katalog roboczy został skasowany.
- ERANGE
- Argument size jest mniejszy od długości nazwy
katalogu roboczego. Trzeba przydzielić większą
tablicę i spróbować ponownie.
UWAGI¶
Pod Linuksem, funkcja
getcwd() jest funkcją systemową (od
2.1.92). W starszych systemach mogła ona odpytywać
/proc/self/cwd. Gdy nie ma ani funkcji systemowej, ani systemu
plików /proc, wywoływana jest implementacja ogólna.
Jedynie w takiej sytuacji wywołanie tych funkcji może w razie
niepomyślnego zakończenia zwrócić
błąd
EACCES.
Funkcje te są często używane do zapamiętywania
położenia bieżącego katalogu roboczego w celu
późniejszego powrotu do niego. Gdy dostępnych jest
dostatecznie wiele deskryptorów plików, otwarcie
bieżącego katalogu (".") i wywołanie
fchdir(2), aby wrócić jest zazwyczaj szybszą i
bardziej niezawodną alternatywą, zwłaszcza na platformach
innych niż Linux.
ZGODNE Z¶
POSIX.1
ZOBACZ TAKŻE¶
chdir(2),
fchdir(2),
open(2),
unlink(2),
free(3),
malloc(3)
Powyższe tłumaczenie pochodzi z nieistniejącego już
Projektu Tłumaczenia Manuali i
może nie być
aktualne. W razie zauważenia różnic między
powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub
funkcji, prosimy o zapoznanie się z oryginalną
(angielską) wersją strony podręcznika za pomocą
polecenia:
- man --locale=C 3 getcwd
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.