.\" -*- coding: UTF-8 -*-
.\" Copyright (C) 2012 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH delete_module 2 "2 maja 2024 r." "Linux man\-pages 6.8" 
.SH NAZWA
delete_module \- usuwa (odłącza) moduł jądra
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <fcntl.h>\fP            /* Definicja stałych \fBO_*\fP */
\fB#include <sys/syscall.h>\fP      /* Definicja stałych \fBSYS_*\fP */
\fB#include <unistd.h>\fP
.P
\fBint syscall(SYS_delete_module, const char *\fP\fIname\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP
.fi
.P
\fIUwaga\fP: glibc nie udostępnia opakowania dla \fBdelete_module\fP(), co wymusza
użycie \fBsyscall\fP(2).
.SH OPIS
Wywołanie systemowe \fBdelete_module\fP() próbuje usunąć nieużywany, ładowalny
wpis modułu określony nazwą \fIname\fP. Jeśli moduł posiada funkcję \fIexit\fP, to
jest ona wykonywana przed usunięciem modułu. Argument \fIflags\fP służy do
modyfikacji zachowania wywołania systemowego, zgodnie z opisem poniżej. To
wywołanie systemowe wymaga uprzywilejowania.
.P
Próba usunięcia modułu zachodzi zgodnie z poniższymi regułami:
.IP (1) 5
Jeśli występują inne załadowane moduły zależące od tego modułu
(tzn. odniesienia do symboli w nim zdefiniowanych), to wywołanie zawodzi.
.IP (2)
W przeciwnym razie, jeśli licznik odniesień do modułu (tzn. liczba procesów
używających go aktualnie) wynosi zero, to moduł jest natychmiast usuwany.
.IP (3)
.\"  	O_TRUNC == KMOD_REMOVE_FORCE in kmod library
.\"  	O_NONBLOCK == KMOD_REMOVE_NOWAIT in kmod library
Jeśli moduł ma niezerowy licznik odniesień, to zachowanie zależy od bitów
ustawionych w \fIflags\fP. Przy zwykłym użyciu (zob. UWAGI), podany jest zawsze
znacznik \fBO_NONBLOCK\fP, dodatkowo można też podać znacznik \fBO_TRUNC\fP.
.IP
Różne zestawienia \fIflags\fP dają następujący rezultat:
.RS
.TP 
\fBflags == O_NONBLOCK\fP
Wywołanie natychmiast zwraca z błędem.
.TP 
\fBflags == (O_NONBLOCK | O_TRUNC)\fP
Moduł jest natychmiast usuwany, niezależnie od tego, czy posiada zerowy
licznik odniesień.
.TP 
\fB(flags & O_NONBLOCK) == 0\fP
Jeśli we \fIflags\fP nie podano \fBO_NONBLOCK\fP, to zachodzą następujące kroki:
.RS
.IP \[bu] 3
Moduł jest oznaczany, dzięki czemu niedozwolone są nowe odniesienia.
.IP \[bu]
Jeśli licznik odniesień modułu jest niezerowy, to wywołujący jest
umieszczany w nieprzerywalnym stanie snu (\fBTASK_UNINTERRUPTIBLE\fP) do
osiągnięcia przez licznik wartości zero, kiedy wywołanie jest odblokowywane.
.IP \[bu]
Moduł jest usuwany w zwykły sposób.
.RE
.RE
.P
Znacznik \fBO_TRUNC\fP ma jeden dodatkowy skutek wobec powyższych
reguł. Domyślnie, jeśli moduł ma funkcję \fIinit\fP, lecz nie posiada funkcji
\fIexit\fP, to próba usunięcia modułu zawodzi. Jeśli jednak podano \fBO_TRUNC\fP
to ten warunek jest pomijany.
.P
Używanie znacznika \fBO_TRUNC\fP jest niebezpieczne! Jeśli jądro nie zostało
zbudowane z \fBCONFIG_MODULE_FORCE_UNLOAD\fP, znacznik jest po cichu ignorowany
(zwykle \fBCONFIG_MODULE_FORCE_UNLOAD\fP jest włączony). Używanie tego
znacznika prowadzi do skażenia jądra (TAINT_FORCED_RMMOD).
.SH "WARTOŚĆ ZWRACANA"
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest \-1 i
ustawiane jest \fIerrno\fP wskazując błąd.
.SH BŁĘDY
.TP 
\fBEBUSY\fP
Moduł nie jest \[Bq]żywy\[rq] (tzn. wciąż jest inicjowany lub został już
oznaczony do usunięcia) lub moduł posiada funkcję \fIinit\fP, ale nie ma
funkcji \fIexit\fP a we \fIflags\fP nie podano \fBO_TRUNC\fP.
.TP 
\fBEFAULT\fP
\fIname\fP odnosi się do położenia, które jest poza dostępną dla procesu
przestrzenią adresową.
.TP 
\fBENOENT\fP
Nie istnieje moduł o tej nazwie.
.TP 
\fBEPERM\fP
Wywołujący nie był uprzywilejowany (nie posiadał przywileju
(ang. capability) \fBCAP_SYS_MODULE\fP) lub usuwanie modułów jest wyłączone
(zob.  \fI/proc/sys/kernel/modules_disabled\fP w \fBproc\fP(5)).
.TP 
\fBEWOULDBLOCK\fP
Od tego modułu zależą inne moduły; albo we \fIflags\fP podano \fBO_NONBLOCK\fP,
lecz licznik odniesień tego modułu jest niezerowy i we \fIflags\fP nie podano
\fBO_TRUNC\fP.
.SH STANDARDY
Linux.
.SH HISTORIA
Wywołanie systemowe \fBdelete_module\fP() nie jest obsługiwane przez glibc. W
nagłówkach glibc nie ma jego deklaracji, ale z powodów pewnych zaszłości
historycznych wersje przed glibc 2.23 eksportowały ABI dla tego wywołania
systemowego. Z tego powodu, aby go użyć wystarczy (przed glibc 2.23)
manualnie zadeklarować interfejs w swoim kodzie; alternatywnie można wywołać
to wywołanie systemowe za pomocą \fBsyscall\fP(2).
.SS "Linux 2.4 i wcześniejsze"
W Linuksie 2.4 i wcześniejszych, wywołanie systemowe przyjmowało jedynie
jeden argument:
.P
\fB int delete_module(const char *\fP\fIname\fP\fB);\fP
.P
Gdy \fIname\fP wynosi NULL, wszystkie nieużywane moduły oznaczone auto\-clean są
usuwane.
.P
Pewne dalsze detale na temat różnic w zachowaniu \fBdelete_module\fP() w
Linuksie 2.4 i wcześniejszych \fInie\fP są obecnie wytłumaczone w niniejszym
podręczniku.
.SH UWAGI
Nieprzerywalny stan snu, który może się zdarzyć, gdy pominie się
\fBO_NONBLOCK\fP z \fIflags\fP jest uważany za niepożądany, ponieważ śpiący proces
pozostawiany jest w stanie nieśmiertelności. Według stanu na Linux 3.7,
podawanie \fBO_NONBLOCK\fP jest opcjonalne, ale w przyszłych jądrach
prawdopodobnie stanie się to obowiązkowe.
.SH "ZOBACZ TAKŻE"
\fBcreate_module\fP(2), \fBinit_module\fP(2), \fBquery_module\fP(2), \fBlsmod\fP(8),
\fBmodprobe\fP(8), \fBrmmod\fP(8)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Przemek Borys <pborys@dione.ids.pl>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
