unlink(2) System Calls Manual unlink(2) NAZWA unlink, unlinkat - usuwa nazwe i moze usunac plik, do ktorej nazwa ta sie odnosi BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int unlink(const char *path); #include /* Definicja stalych AT_* */ #include int unlinkat(int dirfd, const char *path, int flags); Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)): unlinkat(): Od glibc 2.10: _POSIX_C_SOURCE >= 200809L Przed glibc 2.10: _ATFILE_SOURCE OPIS unlink() usuwa nazwe z systemu plikow. Jesli nazwa ta byla ostatnim dowiazaniem do pliku i zaden proces nie utrzymuje tego pliku otwartego, plik jest usuwany, a przestrzen jaka zajmowal staje sie dostepna do ponowego uzytku. Jesli nazwa byla ostatnim dowiazaniem do pliku, lecz istnieja procesy, ktore utrzymuja plik otwarty, plik bedzie istnial do momentu zamkniecia ostatniego, odnoszacego sie do niego, deskryptora pliku. Jesli nazwa odnosi sie do dowiazania symbolicznego, dowiazanie to jest usuwane. Jesli nazwa odnosila sie do gniazda, FIFO lub urzadzenia, nazwa ta jest usuwana, lecz procesy, ktore utrzymywaly obiekt otwarty, wciaz moga go uzywac. unlinkat() Wywolanie systemowe unlinkat() dziala dokladnie w ten sam sposob jak unlink() lub rmdir(2) (w zaleznosci od tego, czy flags zawiera AT_REMOVEDIR, czy tez nie) z wyjatkiem roznic opisanych ponizej. Jesli sciezka path jest wzgledna, to jest interpretowana w odniesieniu do katalogu, do ktorego odnosi sie deskryptor pliku dirfd (zamiast w odniesieniu do biezacego katalogu roboczego procesu wywolujacego, jak czynia to unlink() i rmdir(2) w przypadku sciezek wzglednych). Jesli sciezka path jest wzgledna, a dirfd ma wartosc specjalna AT_FDCWD, to sciezka path jest interpretowana w odniesieniu do biezacego katalogu roboczego procesu wywolujacego (jak czynia to unlink() i rmdir(2)). Jesli sciezka path jest bezwzgledna, to dirfd jest ignorowane. flags jest maska bitowa mogaca byc okreslona jako 0 lub jako suma (OR) wartosci znacznikow, ktore kontroluja dzialanie unlinkat(). Obecnie zdefiniowano tylko jeden taki znacznik: AT_REMOVEDIR Domyslnie, unlinkat() przeprowadza odpowiednik unlink() na path. Jesli podany jest znacznik AT_REMOVEDIR, to przeprowadzany jest odpowiednik rmdir(2) na path. Wiecej informacji o potrzebie wprowadzenia unlinkat() 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 Dostep do zapisu do katalogu zawierajacego path nie jest dozwolony dla efektywnego UID-u procesu, albo jeden z katalogow w path nie dozwala na uprawnienie przeszukania (zob. tez path_resolution(7)). EBUSY path nie moze byc odlinkowana, poniewaz jest uzywana przez system lub inny proces np. jest punktem montowania lub oprogramowanie klienta NFS utworzylo ja do reprezentacji aktywnego, ale poza tym nienazwanego i-wezla (,,NFS silly renamed" -- ,,glupio przemianowane przez NFS"). EFAULT path wskazuje poza dostepna dla uzytkownika przestrzen adresowa. EIO Wystapil blad wejscia/wyjscia. EISDIR path odnosi sie do katalogu (jest to wartosc spoza POSIX, zwracana od Linuksa 2.1.132). ELOOP Przy tlumaczeniu path napotkano zbyt wiele dowiazan symbolicznych. ENAMETOOLONG path byla zbyt dluga. ENOENT Skladowa sciezki path nie istnieje lub jest wiszacym dowiazaniem symbolicznym, lub path jest pusta. ENOMEM Brak pamieci jadra. ENOTDIR Skladowa path, ktora powinna byc katalogiem, w rzeczywistosci katalogiem nie jest. EPERM System nie zezwala na odlinkowanie katalogow lub odlinkowanie katalogow wymaga przywilejow, ktorymi nie dysponuje proces wywolujacy (jest to blad przewidziany przez POSIX, jak zaznaczono wyzej, Linux w tym przypadku zwraca EISDIR). EPERM (tylko Linux) System plikow nie zezwala na odlinkowanie plikow. EPERM lub EACCES Katalog zawierajacy path ma ustawiony bit lepkosci (S_ISVTX), a efektywny UID procesu nie jest ani UID-em usuwanego pliku, ani katalogu go zawierajacego oraz proces nie jest uprzywilejowany (Linux: nie ma przywileju CAP_FOWNER). EPERM Plik do odlinkowania jest oznaczony jako tylko do odczytu lub tylko do nadpisu (zob. rowniez FS_IOC_SETFLAGS(2const)). EROFS path odnosi sie do pliku w systemie plikow tylko do odczytu. Bledy, ktore moga wystapic w unlink() i rmdir(2) moga rowniez wystapic w unlinkat(). Nastepujace dodatkowe bledy moga wystapic w unlinkat(): EBADF path jest wzgledna, lecz dirfd nie wynosi ani AT_FDCWD, ani nie jest prawidlowym deskryptorem pliku. EINVAL We flags podano nieprawidlowa wartosc znacznika. EISDIR path odnosi sie do katalogu, a we flags nie podano AT_REMOVEDIR. ENOTDIR path jest wzgledna, a dirfd jest deskryptorem pliku odnoszacym sie do pliku zamiast do katalogu. STANDARDY POSIX.1-2008. HISTORIA unlink() SVr4, 4.3BSD, POSIX.1-2001. unlinkat() POSIX.1-2008. Linux 2.6.16, glibc 2.4. glibc W starszych jadrach, gdzie unlinkat() jest niedostepne, funkcja opakowujaca z glibc awaryjnie korzysta z unlink() lub rmdir(2). Gdy path jest wzgledna, glibc tworzy sciezke w oparciu o dowiazanie symboliczne w /proc/self/fd, ktore odnosi sie do argumentu dirfd. USTERKI Nietrafne rozwiazania w protokole odpowiedzialnym za obsluge NFS moga spowodowac nieoczekiwane znikniecie plikow, ktore sa wciaz w uzyciu. ZOBACZ TAKZE rm(1), unlink(1), chmod(2), link(2), mknod(2), open(2), rename(2), rmdir(2), mkfifo(3), remove(3), path_resolution(7), symlink(7) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: 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.15 17 maja 2025 r. unlink(2)