getcwd

Autres langues

Langue: pl

Autres versions - même langue

Version: 2002-04-22 (openSuse - 09/10/07)

Autres sections - même nom

Section: 3 (Bibliothèques de fonctions)

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

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)