Provided by: manpages-pl-dev_4.26.0-1_all 

NAZWA
delete_module - usuwa (odłącza) moduł jądra
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#include <fcntl.h> /* Definicja stałych O_* */
#include <sys/syscall.h> /* Definicja stałych SYS_* */
#include <unistd.h>
int syscall(SYS_delete_module, const char *name, unsigned int flags);
Uwaga: glibc nie udostępnia opakowania dla delete_module(), co wymusza użycie syscall(2).
OPIS
Wywołanie systemowe delete_module() próbuje usunąć nieużywany, ładowalny wpis modułu określony nazwą
name. Jeśli moduł posiada funkcję exit, to jest ona wykonywana przed usunięciem modułu. Argument flags
służy do modyfikacji zachowania wywołania systemowego, zgodnie z opisem poniżej. To wywołanie systemowe
wymaga uprzywilejowania.
Próba usunięcia modułu zachodzi zgodnie z poniższymi regułami:
(1) 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.
(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.
(3) Jeśli moduł ma niezerowy licznik odniesień, to zachowanie zależy od bitów ustawionych w flags. Przy
zwykłym użyciu (zob. UWAGI), podany jest zawsze znacznik O_NONBLOCK, dodatkowo można też podać
znacznik O_TRUNC.
Różne zestawienia flags dają następujący rezultat:
flags == O_NONBLOCK
Wywołanie natychmiast zwraca z błędem.
flags == (O_NONBLOCK | O_TRUNC)
Moduł jest natychmiast usuwany, niezależnie od tego, czy posiada zerowy licznik odniesień.
(flags & O_NONBLOCK) == 0
Jeśli we flags nie podano O_NONBLOCK, to zachodzą następujące kroki:
• Moduł jest oznaczany, dzięki czemu niedozwolone są nowe odniesienia.
• Jeśli licznik odniesień modułu jest niezerowy, to wywołujący jest umieszczany w
nieprzerywalnym stanie snu (TASK_UNINTERRUPTIBLE) do osiągnięcia przez licznik wartości
zero, kiedy wywołanie jest odblokowywane.
• Moduł jest usuwany w zwykły sposób.
Znacznik O_TRUNC ma jeden dodatkowy skutek wobec powyższych reguł. Domyślnie, jeśli moduł ma funkcję
init, lecz nie posiada funkcji exit, to próba usunięcia modułu zawodzi. Jeśli jednak podano O_TRUNC to
ten warunek jest pomijany.
Używanie znacznika O_TRUNC jest niebezpieczne! Jeśli jądro nie zostało zbudowane z
CONFIG_MODULE_FORCE_UNLOAD, znacznik jest po cichu ignorowany (zwykle CONFIG_MODULE_FORCE_UNLOAD jest
włączony). Używanie tego znacznika prowadzi do skażenia jądra (TAINT_FORCED_RMMOD).
WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest -1 i ustawiane jest errno wskazując
błąd.
BŁĘDY
EBUSY Moduł nie jest „żywy” (tzn. wciąż jest inicjowany lub został już oznaczony do usunięcia) lub moduł
posiada funkcję init, ale nie ma funkcji exit a we flags nie podano O_TRUNC.
EFAULT name odnosi się do położenia, które jest poza dostępną dla procesu przestrzenią adresową.
ENOENT Nie istnieje moduł o tej nazwie.
EPERM Wywołujący nie był uprzywilejowany (nie posiadał przywileju (ang. capability) CAP_SYS_MODULE) lub
usuwanie modułów jest wyłączone (zob. /proc/sys/kernel/modules_disabled w proc(5)).
EWOULDBLOCK
Od tego modułu zależą inne moduły; albo we flags podano O_NONBLOCK, lecz licznik odniesień tego
modułu jest niezerowy i we flags nie podano O_TRUNC.
STANDARDY
Linux.
HISTORIA
Wywołanie systemowe delete_module() 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ą
syscall(2).
Linux 2.4 i wcześniejsze
W Linuksie 2.4 i wcześniejszych, wywołanie systemowe przyjmowało jedynie jeden argument:
int delete_module(const char *name);
Gdy name wynosi NULL, wszystkie nieużywane moduły oznaczone auto-clean są usuwane.
Pewne dalsze detale na temat różnic w zachowaniu delete_module() w Linuksie 2.4 i wcześniejszych nie są
obecnie wytłumaczone w niniejszym podręczniku.
UWAGI
Nieprzerywalny stan snu, który może się zdarzyć, gdy pominie się O_NONBLOCK z flags 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 O_NONBLOCK jest opcjonalne, ale w przyszłych jądrach prawdopodobnie stanie się to
obowiązkowe.
ZOBACZ TAKŻE
create_module(2), init_module(2), query_module(2), lsmod(8), modprobe(8), rmmod(8)
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>
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.
Linux man-pages 6.9.1 2 maja 2024 r. delete_module(2)