table of contents
symlink(2) | System Calls Manual | 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);
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¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: 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 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.
2 maja 2024 r. | Linux man-pages (niewydane) |