symlink(2)

NAZWA
symlink, symlinkat - tworzy nową nazwę dla pliku

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

SKŁADNIA
#include <unistd.h>

int symlink(const char *target, const char *linkpath);

#include <fcntl.h>           /* Definicja stałych AT_* */
#include <unistd.h>

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 dowiązanie symboliczne o nazwie linkpath które zawiera łańcuch znakowy target.

Dowiązania symboliczne są interpretowane w czasie działania, tak jakby zawartość dowiązania była podstawiana do ścieżki, przeglądanej by znaleźć plik lub katalog.

Dowiązania symboliczne mogą zawierać składniki .., które (jeśli używane na początku dowiązania) odnoszą się do katalogów nadrzędnych katalogu, w którym dane dowiązanie się znajduje.

Dowiązanie symboliczne (czasem nazywane również miękkim dowiązaniem) może wskazywać na plik istniejący, lub nieistniejący; ten drugi przypadek znany jest pod pojęciem wiszącego dowiązania.

Prawa dostępu dla dowiązania symbolicznego są nieistotne; jego własność jest ignorowana podczas podążania za nim (z wyjątkiem sytuacji, gdy włączono funkcję protected_symlinks, zgodnie z wyjaśnieniem w proc(5)), lecz sprawdzane podczas usuwania lub przemianowywania, gdy dowiązanie jest w katalogu z ustawionym bitem lepkości (S_ISVTX).

Jeśli ścieżka linkpath istnieje to nie będzie nadpisana.

  symlinkat()
Wywołanie systemowe symlinkat() operuje w dokładnie taki sam sposób jak symlink(), z wyjątkiem różnic opisanych tutaj.

Jeśli ścieżka podana w linkpath jest względna, jest to interpretowane w odniesieniu do katalogu do którego odnosi się deskryptor pliku newdirfd (zamiast w odniesieniu do bieżącego katalogu roboczego procesu wywołującego, jak w stosunku do ścieżek względnych robi to symlink()).

Jeśli linkpath jest względna a newdirfd ma wartość specjalną AT_FDCWD, to linkpath jest interpretowana w odniesieniu do bieżącego katalogu roboczego procesu wywołującego (jak symlink()).

Jeśli ścieżka linkpath jest bezwzględna, to newdirfd jest ignorowane.

Więcej informacji o potrzebie wprowadzenia symlinkat() można znaleźć w podręczniku openat(2).

WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest -1 i ustawiane errno, wskazując błąd.

BŁĘDY

EACCES
    Odmówiono zapisu do katalogu zawierającego linkpath lub jeden z katalogów w składowej ścieżek linkpath nie zezwala na uprawnienie przeszukiwania (zob. też path_resolution(7)).

EBADF
    (symlinkat()) linkpath jest względne, lecz newdirfd nie wynosi ani AT_FDCWD, ani nie jest prawidłowym deskryptorem pliku.

EDQUOT
    Wyczerpano przydział zasobów użytkownika w systemie plików. Zasobami mogą być i-węzły lub bloki dyskowe, w zależności od implementacji systemu plików.

EEXIST
    linkpath już istnieje.

EFAULT
    target lub linkpath wskazuje poza dostępną dla użytkownika przestrzeń adresową.

EIO Wystąpił błąd wejścia/wyjścia.

ELOOP
    Podczas rozwiązywania linkpath napotkano zbyt wiele dowiązań symbolicznych.

ENAMETOOLONG
    target lub linkpath było zbyt długie.

ENOENT
    Składnik linkpath, który powinien być katalogiem, nie istnieje lub jest wiszącym dowiązaniem symbolicznym albo target lub linkpath jest łańcuchem pustym.

ENOENT
    (symlinkat()) linkpath jest ścieżką względną, a newdirfd odnosi się do usuniętego katalogu.

ENOMEM
    Brak pamięci jądra.

ENOSPC
    Na urządzeniu zawierającym plik nie ma miejsca na kolejny wpis w katalogu.

ENOTDIR
    Składnik użyty jako katalog w linkpath w rzeczywistości nie jest katalogiem.

ENOTDIR
    (symlinkat()) linkpath jest względna, a newdirfd jest deskryptorem pliku odnoszącym się do pliku, zamiast do katalogu.

EPERM
    System plików zawierający linkpath nie zezwala na tworzenie dowiązań symbolicznych.

EROFS
    Plik linkpath znajduje się na systemie plików 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 jądra Linux, gdzie symlinkat() nie było dostępne, funkcja opakowująca z glibc wraca do używania symlink(). Kiedy linkpath jest względną ścieżką, glibc konstruuje ścieżkę na bazie dowiązania symbolicznego w /proc/self/fd, które odpowiada argumentowi newdirfd.

UWAGI
Nie jest dokonywane sprawdzenie target.

Usunięcie nazwy, na którą wskazuje dowiązanie symboliczne, w rzeczywistości spowoduje skasowanie pliku (chyba że ma jeszcze inne twarde dowiązania). Jeśli zachowanie to nie jest pożądane, należy używać link(2).

ZOBACZ TAKŻE
ln(1), namei(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2), unlink(2), path_resolution(7), symlink(7)

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Przemek Borys <pborys@dione.ids.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i Michał Kułach <michal.kulach@gmail.com>

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.