Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       delete_module - descarcă un modul din nucleu

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <fcntl.h>            /* Definiția constantelor O_* */
       #include <sys/syscall.h>      /* Definiția constantelor SYS_* */
       #include <unistd.h>

       int syscall(SYS_delete_module, const char *name, unsigned int flags);

       Notă: glibc nu oferă o funcție învăluitoare pentru delete_module(), fiind necesară utilizarea syscall(2).

DESCRIERE

       Apelul  de  sistem  delete_module()  încearcă  să  elimine  intrarea  neutilizată  a modulului încărcabil
       identificat de name. În cazul în care  modulul  are  o  funcție  exit,  atunci  funcția  respectivă  este
       executată   înainte   de  descărcarea  modulului.  Argumentul  flags  este  utilizat  pentru  a  modifica
       comportamentul apelului de sistem, după  cum  este  descris  mai  jos.  Acest  apel  de  sistem  necesită
       privilegii.

       Îndepărtarea modulelor se încearcă în conformitate cu următoarele reguli:

       (1)  Dacă  există alte module încărcate care depind de acest modul (adică se referă la simboluri definite
            în acesta), atunci apelul eșuează.

       (2)  În caz contrar, dacă numărul de referințe pentru modul (adică numărul de procese care utilizează  în
            prezent modulul) este zero, atunci modulul este descărcat imediat.

       (3)  Dacă  un  modul  are  un  număr de referințe diferit de zero, atunci comportamentul depinde de biții
            activați în flags. În utilizarea normală (a  se  vedea  NOTE),  se  specifică  întotdeauna  fanionul
            O_NONBLOCK, iar fanionul O_TRUNC poate fi specificat suplimentar.

            Diferitele combinații pentru flags au următorul efect:

            flags == O_NONBLOCK
                   Apelul returnează imediat, cu o eroare.

            flags == (O_NONBLOCK | O_TRUNC)
                   Modulul  este  descărcat imediat, indiferent dacă are sau nu un număr de referințe diferit de
                   zero.

            (flags & O_NONBLOCK) == 0
                   Dacă flags nu specifică O_NONBLOCK, au loc următorii pași:

                   •  Modulul este marcat astfel încât să nu fie permise referințe noi.

                   •  În cazul în care numărul de referințe al modulului este diferit de  zero,  apelantul  este
                      plasat  într-o  stare  de  somn  neîntrerupt  (TASK_UNINTERRUPTIBLE)  până când numărul de
                      referințe este zero, moment în care apelul se deblochează.

                   •  Modulul este descărcat în mod obișnuit.

       Fanionul O_TRUNC are un efect suplimentar asupra regulilor descrise mai sus. În mod implicit, în cazul în
       care un modul are o funcție init, dar nu are o funcție exit,  atunci  încercarea  de  a  elimina  modulul
       eșuează. Cu toate acestea, dacă s-a specificat O_TRUNC, această cerință este ocolită.

       Utilizarea   fanionului   O_TRUNC   este   periculoasă!   Dacă   nucleul   nu   a   fost   construit   cu
       CONFIG_MODULE_FORCE_UNLOAD,   acest   fanion    este    ignorat    în    tăcere;    (în    mod    normal,
       CONFIG_MODULE_FORCE_UNLOAD  este  activat).  Utilizarea  acestui  fanion  afectează,  „pătează”,  nucleul
       (TAINT_FORCED_RMMOD).

VALOAREA RETURNATĂ

       În caz de succes, se returnează zero. În caz de eroare, se returnează  -1,  iar  errno  este  configurată
       pentru a indica eroarea.

ERORI-IEȘIRE

       EBUSY  Modulul  nu  este  „viu”  (adică  este  încă  în  curs de inițializare sau este deja marcat pentru
              eliminare); sau, modulul are o funcție init, dar nu are o funcție exit,  iar  O_TRUNC  nu  a  fost
              specificat în flags.

       EFAULT name se referă la o locație din afara spațiului de adrese accesibil procesului.

       ENOENT Nu există niciun modul cu acest nume.

       EPERM  Apelantul  nu  era privilegiat (nu avea capacitatea CAP_SYS_MODULE) sau descărcarea modulelor este
              dezactivată (a se vedea /proc/sys/kernel/modules_disabled în proc(5)).

       EWOULDBLOCK
              Alte module depind de acest modul; sau, O_NONBLOCK a fost specificat  în  flags,  dar  numărul  de
              referințe al acestui modul este diferit de zero și O_TRUNC nu a fost specificat în flags.

STANDARDE

       Linux.

ISTORIC

       Apelul  de  sistem  delete_module()  nu este acceptat de glibc. În antetele glibc nu este furnizată nicio
       declarație, dar, printr-o ciudățenie a istoriei, versiunile glibc anterioare glibc 2.23  au  exportat  un
       ABI  pentru  acest  apel  de  sistem.  Prin urmare, pentru a utiliza acest apel de sistem, este suficient
       (înainte de glibc 2.23) să declarați manual interfața în codul dumneavoastră; alternativ,  puteți  invoca
       apelul de sistem utilizând syscall(2).

   Linux 2.4 și versiunile anterioare
       În Linux 2.4 și versiunile anterioare, apelul de sistem avea un singur argument:

        int delete_module(const char *name);

       Dacă name este NULL, toate modulele nefolosite marcate „auto-clean” (auto-curățare) sunt eliminate.

       Unele  detalii  suplimentare  privind  diferențele  de  comportament  ale delete_module() în Linux 2.4 și
       versiunile anterioare nu sunt explicate în prezent în această pagină de manual.

NOTE

       Somnul neîntrerupt care poate apărea dacă O_NONBLOCK este omis din  flags  este  considerat  indezirabil,
       deoarece  procesul  care doarme este lăsat într-o stare de nestingherit. Ca și în Linux 3.7, specificarea
       O_NONBLOCK este opțională, dar în nucleele viitoare este posibil să devină obligatorie.

CONSULTAȚI ȘI

       create_module(2), init_module(2), query_module(2), lsmod(8), modprobe(8), rmmod(8)

TRADUCERE

       Traducerea   în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel    Chelu
       <remusgabriel.chelu@disroot.org>

       Această  traducere  este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3 sau o
       versiune  ulterioară  cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se   asumă   NICIO
       RESPONSABILITATE.

       Dacă  găsiți  erori  în  traducerea  acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                    2 mai 2024                                   delete_module(2)