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