symlink(2) System Calls Manual symlink(2) NAZWA symlink, symlinkat - tworzy nowa nazwe dla pliku BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int symlink(const char *target, const char *linkpath); #include /* Definicja stalych AT_* */ #include int symlinkat(const char *target, int newdirfd, const char *linkpath); Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)): symlink(): _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L || /* glibc <= 2.19: */ _BSD_SOURCE symlinkat(): Od glibc 2.10: _POSIX_C_SOURCE >= 200809L Przed glibc 2.10: _ATFILE_SOURCE OPIS symlink() tworzy dowiazanie symboliczne o nazwie linkpath ktore zawiera lancuch znakowy target. Dowiazania symboliczne sa interpretowane w czasie dzialania, tak jakby zawartosc dowiazania byla podstawiana do sciezki, przegladanej by znalezc plik lub katalog. Dowiazania symboliczne moga zawierac skladniki .., ktore (jesli uzywane na poczatku dowiazania) odnosza sie do katalogow nadrzednych katalogu, w ktorym dane dowiazanie sie znajduje. Dowiazanie symboliczne (czasem nazywane rowniez miekkim dowiazaniem) moze wskazywac na plik istniejacy, lub nieistniejacy; ten drugi przypadek znany jest pod pojeciem wiszacego dowiazania. Prawa dostepu dla dowiazania symbolicznego sa nieistotne; jego wlasnosc jest ignorowana podczas podazania za nim (z wyjatkiem sytuacji, gdy wlaczono funkcje protected_symlinks, zgodnie z wyjasnieniem w proc(5)), lecz sprawdzane podczas usuwania lub przemianowywania, gdy dowiazanie jest w katalogu z ustawionym bitem lepkosci (S_ISVTX). Jesli sciezka linkpath istnieje to nie bedzie nadpisana. symlinkat() Wywolanie systemowe symlinkat() operuje w dokladnie taki sam sposob jak symlink(), z wyjatkiem roznic opisanych tutaj. Jesli sciezka podana w linkpath jest wzgledna, jest to interpretowane w odniesieniu do katalogu do ktorego odnosi sie deskryptor pliku newdirfd (zamiast w odniesieniu do biezacego katalogu roboczego procesu wywolujacego, jak w stosunku do sciezek wzglednych robi to symlink()). Jesli linkpath jest wzgledna a newdirfd ma wartosc specjalna AT_FDCWD, to linkpath jest interpretowana w odniesieniu do biezacego katalogu roboczego procesu wywolujacego (jak symlink()). Jesli sciezka linkpath jest bezwzgledna, to newdirfd jest ignorowane. Wiecej informacji o potrzebie wprowadzenia symlinkat() mozna znalezc w podreczniku openat(2). WARTOSC ZWRACANA Po pomyslnym zakonczeniu zwracane jest zero. Po bledzie zwracane jest -1 i ustawiane errno, wskazujac blad. BLEDY EACCES Odmowiono zapisu do katalogu zawierajacego linkpath lub jeden z katalogow w skladowej sciezek linkpath nie zezwala na uprawnienie przeszukiwania (zob. tez path_resolution(7)). EBADF (symlinkat()) linkpath jest wzgledne, lecz newdirfd nie wynosi ani AT_FDCWD, ani nie jest prawidlowym deskryptorem pliku. EDQUOT Wyczerpano przydzial zasobow uzytkownika w systemie plikow. Zasobami moga byc i-wezly lub bloki dyskowe, w zaleznosci od implementacji systemu plikow. EEXIST linkpath juz istnieje. EFAULT target lub linkpath wskazuje poza dostepna dla uzytkownika przestrzen adresowa. EIO Wystapil blad wejscia/wyjscia. ELOOP Podczas rozwiazywania linkpath napotkano zbyt wiele dowiazan symbolicznych. ENAMETOOLONG target lub linkpath bylo zbyt dlugie. ENOENT Skladnik linkpath, ktory powinien byc katalogiem, nie istnieje lub jest wiszacym dowiazaniem symbolicznym albo target lub linkpath jest lancuchem pustym. ENOENT (symlinkat()) linkpath jest sciezka wzgledna, a newdirfd odnosi sie do usunietego katalogu. ENOMEM Brak pamieci jadra. ENOSPC Na urzadzeniu, zawierajacym plik nie ma miejsca na kolejny wpis w katalogu. ENOTDIR Skladnik uzyty jako katalog w linkpath w rzeczywistosci nie jest katalogiem. ENOTDIR (symlinkat()) linkpath jest wzgledna, a newdirfd jest deskryptorem pliku odnoszacym sie do pliku, zamiast do katalogu. EPERM System plikow zawierajacy linkpath nie zezwala na tworzenie dowiazan symbolicznych. EROFS Plik linkpath znajduje sie na systemie plikow tylko dla odczytu. STANDARDY POSIX.1-2008. HISTORIA symlink() SVr4, 4.3BSD, POSIX.1-2001. symlinkat() POSIX.1-2008. Linux 2.6.16, glibc 2.4. Uwagi dla glibc Na starszych wersjach jadra Linux, gdzie symlinkat() nie bylo dostepne, funkcja opakowujaca z glibc wraca do uzywania symlink(). Kiedy linkpath jest wzgledna sciezka, glibc konstruuje sciezke na bazie dowiazania symbolicznego w /proc/self/fd, ktore odpowiada argumentowi newdirfd. UWAGI Nie jest dokonywane sprawdzenie target. Usuniecie nazwy, na ktora wskazuje dowiazanie symboliczne, w rzeczywistosci spowoduje skasowanie pliku (chyba ze ma jeszcze inne twarde dowiazania). Jesli zachowanie to nie jest pozadane, nalezy uzywac link(2). ZOBACZ TAKZE ln(1), namei(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2), unlink(2), path_resolution(7), symlink(7) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Przemek Borys , Andrzej Krzysztofowicz i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.8 2 maja 2024 r. symlink(2)