Provided by: manpages-pl-dev_4.23.1-1_all bug

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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⟩.