| link(2) | System Calls Manual | link(2) |
link, linkat - tworzy kolejną nazwę pliku
Standardowa biblioteka C (libc, -lc)
#include <unistd.h>
int link(const char *oldpath, const char *newpath);
#include <fcntl.h> /* Definicja stałych AT_* */ #include <unistd.h>
int linkat(int olddirfd, const char *oldpath,
int newdirfd, const char *newpath, int flags);
linkat():
Od glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Przed glibc 2.10:
_ATFILE_SOURCE
link() tworzy nowe dowiązanie (nazywane też dowiązaniem zwykłym albo twardym) do istniejącego pliku.
Jeśli plik newpath już istnieje, to nie będzie nadpisany.
Ta nowa nazwa może być używana dokładnie tak samo jak stara, w dowolnych operacjach; obie nazwy odnoszą się do tego samego pliku (i w związku z tym mają te same uprawnienia i własność). Nie można też powiedzieć, która nazwa jest „oryginalna”.
Wywołanie systemowe linkat() operuje w dokładnie taki sam sposób jak link(), z wyjątkiem różnic opisanych tutaj.
Jeśli ścieżka podana w oldpath jest względna, jest ona interpretowana względem katalogu, do którego odnosi się deskryptor pliku olddirfd (zamiast względem bieżącego katalogu roboczego procesu wywołującego, jak ma to miejsce w link() w przypadku ścieżek względnych).
Jeśli oldpath jest względna, a olddirfd ma wartość specjalną AT_FDCWD, to oldpath jest interpretowana względem bieżącego katalogu roboczego procesu wywołującego (czyli tak jak robi to link()).
Jeśli oldpath jest bezwzględna, to olddirfd jest ignorowane.
Interpretacja newpath jest taka sama jak oldpath, z tym wyjątkiem, że ścieżka względna jest interpretowana względem katalogu, do którego odnosi się deskryptor pliku newdirfd.
Następujące wartości mogą być zsumowane bitowo (OR) we flags:
linkat(AT_FDCWD, "/proc/self/fd/<fd>", newdirfd,
newname, AT_SYMLINK_FOLLOW);
Przed Linuksem 2.6.18, argument flags nie był używany; wymagane było podanie jego wartości równej 0.
Więcej informacji o potrzebie wprowadzenia linkat() można znaleźć w podręczniku openat(2).
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest -1 i ustawiane errno, wskazując błąd.
Mogą wystąpić następujące dodatkowe błędy dla linkat():
open(path, O_TMPFILE | O_EXCL, mode);
POSIX.1-2001 twierdzi, że link() powinien rozwiązywać oldpath, jeśli jest ona dowiązaniem symbolicznym. Jednak od Linuksa 2.0, Linux tak nie czyni: jeśli oldpath jest dowiązaniem symbolicznym, to newpath jest tworzona jako dowiązanie zwykłe (twarde) do samego pliku dowiązania symbolicznego (tj. newpath staje się dowiązaniem symbolicznym do tego samego pliku, do którego odnosi się oldpath). Niektóre inne implementacje zachowują się w ten sam sposób co Linux. POSIX.1-2008 zmieniło specyfikację link(), czyniąc rozwiązywanie oldpath gdy jest to dowiązanie symboliczne, zależnym od implementacji. Aby uzyskać precyzyjną kontrolę nad traktowaniem dowiązań symbolicznych przy tworzeniu dowiązań zwykłych, należy korzystać z linkat().
W starszych jądrach, gdy niedostępne jest linkat() funkcja opakowująca z biblioteki glibc z konieczności korzysta z link(), chyba że podano AT_SYMLINK_FOLLOW. Gdy oldpath i newpath są ścieżkami względnymi, glibc tworzy ścieżki w zależności od dowiązań symbolicznych w /proc/self/fd, które odnoszą się do argumentów olddirfd i newdirfd.
Dowiązania zwykłe (twarde), tworzone z pomocą link(), nie mogą wykraczać poza jeden system plików. W takich sytuacjach można użyć funkcji symlink(2).
Na systemach NFS, wartość zwracana może być nieprawidłowa w wypadku gdy serwer NFS dokonuje tworzenia dowiązania i umiera przed zakomunikowaniem tego faktu. Można użyć stat(2) aby dowiedzieć się, czy dowiązanie zostało utworzone.
ln(1), open(2), rename(2), stat(2), symlink(2), unlink(2), path_resolution(7), symlink(7)
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 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.
| 13 czerwca 2024 r. | Linux man-pages 6.9.1 |