noble (3) getcwd.3.gz

Provided by: manpages-pl-dev_4.21.0-2_all bug

NAZWA

       getcwd, getwd, get_current_dir_name - odczytanie bieżącego katalogu roboczego

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <unistd.h>

       char *getcwd(char buf[.size], size_t size);
       char *get_current_dir_name(void);

       [[deprecated]] char *getwd(char buf[PATH_MAX]);

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       get_current_dir_name():
           _GNU_SOURCE

       getwd():
           Od glibc 2.12:
               (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200809L)
                   || /* glibc >= 2.19: */ _DEFAULT_SOURCE
                   || /* glibc <= 2.19: */ _BSD_SOURCE
           Przed glibc 2.12:
               _BSD_SOURCE || _XOPEN_SOURCE >= 500

OPIS

       Te  funkcje  zwracają  zakończony  bajtem  null  łańcuch znaków zawierający nazwę bezwzględnej ścieżki do
       bieżącego katalogu roboczego procesu wywołującego. Nazwa ścieżki  jest  zwracana  jako  wynik  funkcji  i
       poprzez argument buf, jeśli jest obecny.

       Funkcja  getcwd()   kopiuje  nazwę  bezwzględnej  ścieżki dostępu 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żeli jest to potrzebne.

       Jako rozszerzenie standardu POSIX.1-2001, wersja glibc  funkcji  getcwd()  przydziela  bufor  dynamicznie
       korzystając  z  malloc(3), jeśli buf jest równe NULL. W tym przypadku przydzielony bufor ma długość size,
       chyba że size jest równe zero, co oznacza że buforowi buf jest przydzielane tyle pamięci,  ile  potrzeba.
       Program wywołujący powinien zwolnić zwrócony bufor, wywołując free(3).

       get_current_dir_name()   przydzieli  za  pomocą  malloc(3)  tablicę  dostatecznie  dużą,  aby  przechować
       bezwzględną nazwę bieżącego katalogu. Jeśli zmienna  środowiskowa  PWD  jest  ustawiona,  a  jej  wartość
       prawidłowa,  to  zostanie  zwrócona  ta  wartość.  Program  wywołujący  powinien  zwolnić zwrócony bufor,
       wywołując free(3).

       getwd() nie przydziela ż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. Jeśli długość bezwzględnej ścieżki do bieżącego katalogu
       roboczego łącznie z końcowym bajtem null przekracza PATH_MAX bajtów, to zwracany jest NULL i  errno  jest
       ustawiane  na  ENAMETOOLONG.  (Należy  zwrócić  uwagę,  że  PATH_MAX nie musi być stałą określaną podczas
       kompilacji; co więcej może ona zależeć od systemu plików, patrz pathconf(3)). Ze względu na przenośność i
       bezpieczeństwo używanie getwd() nie jest zalecane.

WARTOŚĆ ZWRACANA

       On  success,  these functions return a pointer to a string containing the pathname of the current working
       directory.  In the case of getcwd()  and getwd()  this is the same value as buf.

       W przypadku błędu funkcje te zwracają NULL, jednocześnie ustawiając errno, wskazujące  na  rodzaj  błędu.
       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.

       EINVAL getwd(): buf jest równy NULL.

       ENAMETOOLONG
              getwd():  Rozmiar  zakończonej  znakiem  null  pełnej nazwy katalogu roboczego przekracza PATH_MAX
              bajtów.

       ENOENT Bieżący katalog roboczy został skasowany.

       ENOMEM Brak pamięci.

       ERANGE Argument size jest mniejszy od długości pełnej nazwy katalogu roboczego, włączając  w  to  końcowy
              bajt null. Należy przydzielić większą tablicę i spróbować ponownie.

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).

       ┌─────────────────────────────────────────────────────────────────┬────────────────────────┬─────────────┐
       │InterfejsAtrybutWartość     │
       ├─────────────────────────────────────────────────────────────────┼────────────────────────┼─────────────┤
       │getcwd(), getwd()                                                │ Bezpieczeństwo wątkowe │ MT-Safe     │
       ├─────────────────────────────────────────────────────────────────┼────────────────────────┼─────────────┤
       │get_current_dir_name()                                           │ Bezpieczeństwo wątkowe │ MT-Safe env │
       └─────────────────────────────────────────────────────────────────┴────────────────────────┴─────────────┘

STANDARDY

       getcwd()  jest  zgodna  z  POSIX.1-2001.  Należy  jednak zauważyć, że POSIX.1-2001 nie określa zachowania
       funkcji getcwd(), jeśli buf jest równy NULL.

       getwd() jest oznaczona jako przestarzała w POSIX.1-2001. POSIX.1-2008 usuwa  definicję  getwd().  Zamiast
       niej należy używać getcwd(). POSIX.1-2001 nie określa żadnych błędów dla getwd().

       get_current_dir_name() jest rozszerzeniem GNU.

UWAGI

       Pod  Linuksem  funkcje te używają wywołania systemowego getcwd() (dostępnego od wersji 2.1.92 Linuksa). W
       starszych systemach mogły 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 pod
       Linuksem zwrócić w razie niepomyślnego zakończenia 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  do  niego  wrócić,  jest  zazwyczaj  szybszą  i  bardziej  niezawodną
       alternatywą, zwłaszcza na platformach innych niż Linux.

   Różnice biblioteki C/jądra
       Jądro  Linuksa  dostarcza wywołania systemowego getcwd, które jeśli jest to możliwe, będzie używane przez
       funkcje opisane w tym podręczniku. Wywołanie to przyjmuje takie same argumenty, jak funkcja  biblioteczna
       o  tej  samej  nazwie,  ale długość zwracanej wartości jest ograniczona do PATH_MAX bajtów. (Przed wersją
       3.12 Linuksa, ograniczeniem długości zwracane wartości był rozmiar strony systemowej. W  przypadku  wielu
       architektur  sprzętowych  PATH_MAX  i  rozmiar  strony  są  sobie  równe  i  wynoszą 4096, ale jest kilka
       architektur, które mają większy rozmiar strony).  Jeśli  długość  ścieżki  bieżącego  katalogu  roboczego
       przekracza  ten  limit,  to  wywołanie  systemowe  zwraca  błąd   ENAMETOOLONG. W takim przypadku funkcje
       biblioteczne przechodzą do alternatywnej (wolniejszej) implementacji zwracającej pełną nazwę ścieżki.

       Jeśli bieżący katalog roboczy nie znajduje się poniżej głównego katalogu bieżącego procesu  (na  przykład
       ponieważ ustawił nowy katalog główny systemu plików za pomocą chroot(2), ale nie zmienił swojego katalogu
       bieżącego na ten nowy katalog główny), to od Linuksa 2.6.36 zwrócona ścieżka zostanie poprzedzona napisem
       "(unreachable)".  Takie  zachowanie  może  być  także  spowodowane przez użytkownika nieuprzywilejowanego
       zmieniającego  bieżący  katalog  do  innej  przestrzeni  nazw  montowania.  Podczas  pracy  z   ścieżkami
       pochodzącymi  z  niezaufanych  źródeł  programy  wywołujące  te funkcje powinny rozważyć sprawdzanie, czy
       zwrócona ścieżka zaczyna się od znaku  "/", czy od znaku "(", aby uniknąć  interpretowania  niedostępnych
       ścieżek jako ścieżek względnych.

BŁĘDY

       Poacząwszy  od  tej  zmiany  w  Linuksie  2.6.36,  która w przypadkach powyżej opisanych dodawała prefiks
       "(unreachable)", implementacja glibc funkcji getcwd() stała się niezgodna ze standardem POSIX i  zwracała
       względną  ścieżkę,  mimo  że  API  wymagało  ścieżki  bezwzględnej.  Zostało  to naprawione w glibc 2.27:
       wywołanie getcwd() z takiego katalogu bieżącego zwróci błąd ENONET.

ZOBACZ TAKŻE

       pwd(1), chdir(2), fchdir(2), open(2), unlink(2), free(3), malloc(3)

TŁUMACZENIE

       Autorami   polskiego   tłumaczenia   niniejszej   strony   podręcznika   są:    Andrzej    Krzysztofowicz
       <ankry@green.mf.pg.gda.pl> i Robert Luberda <robert@debian.org>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją.  Bliższe informacje o warunkach licencji można uzyskać
       zapoznając się z GNU General Public License w wersji  3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  lub
       nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy dyskusyjnej ⟨manpages-pl-
       list@lists.sourceforge.net⟩.