delete_module(2) System Calls Manual delete_module(2) NUME delete_module - descarca un modul din nucleu BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include /* Definiia constantelor O_* */ #include /* Definiia constantelor SYS_* */ #include int syscall(SYS_delete_module, const char *name, unsigned int flags); Nota: glibc nu ofera o funcie invaluitoare pentru delete_module(), fiind necesara utilizarea syscall(2). DESCRIERE Apelul de sistem delete_module() incearca sa elimine intrarea neutilizata a modulului incarcabil identificat de name. In cazul in care modulul are o funcie exit, atunci funcia respectiva este executata inainte de descarcarea modulului. Argumentul flags este utilizat pentru a modifica comportamentul apelului de sistem, dupa cum este descris mai jos. Acest apel de sistem necesita privilegii. Indepartarea modulelor se incearca in conformitate cu urmatoarele reguli: (1) Daca exista alte module incarcate care depind de acest modul (adica se refera la simboluri definite in acesta), atunci apelul eueaza. (2) In caz contrar, daca numarul de referine pentru modul (adica numarul de procese care utilizeaza in prezent modulul) este zero, atunci modulul este descarcat imediat. (3) Daca un modul are un numar de referine diferit de zero, atunci comportamentul depinde de biii activai in flags. In utilizarea normala (a se vedea NOTE), se specifica intotdeauna fanionul O_NONBLOCK, iar fanionul O_TRUNC poate fi specificat suplimentar. Diferitele combinaii pentru flags au urmatorul efect: flags == O_NONBLOCK Apelul returneaza imediat, cu o eroare. flags == (O_NONBLOCK | O_TRUNC) Modulul este descarcat imediat, indiferent daca are sau nu un numar de referine diferit de zero. (flags & O_NONBLOCK) == 0 Daca flags nu specifica O_NONBLOCK, au loc urmatorii pai: o Modulul este marcat astfel incat sa nu fie permise referine noi. o In cazul in care numarul de referine al modulului este diferit de zero, apelantul este plasat intr-o stare de somn neintrerupt (TASK_UNINTERRUPTIBLE) pana cand numarul de referine este zero, moment in care apelul se deblocheaza. o Modulul este descarcat in mod obinuit. Fanionul O_TRUNC are un efect suplimentar asupra regulilor descrise mai sus. In mod implicit, in cazul in care un modul are o funcie init, dar nu are o funcie exit, atunci incercarea de a elimina modulul eueaza. Cu toate acestea, daca s-a specificat O_TRUNC, aceasta cerina este ocolita. Utilizarea fanionului O_TRUNC este periculoasa! Daca nucleul nu a fost construit cu CONFIG_MODULE_FORCE_UNLOAD, acest fanion este ignorat in tacere; (in mod normal, CONFIG_MODULE_FORCE_UNLOAD este activat). Utilizarea acestui fanion afecteaza, ,,pateaza", nucleul (TAINT_FORCED_RMMOD). VALOAREA RETURNATA In caz de succes, se returneaza zero. In caz de eroare, se returneaza -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE EBUSY Modulul nu este ,,viu" (adica este inca in curs de iniializare sau este deja marcat pentru eliminare); sau, modulul are o funcie init, dar nu are o funcie exit, iar O_TRUNC nu a fost specificat in flags. EFAULT name se refera la o locaie din afara spaiului de adrese accesibil procesului. ENOENT Nu exista niciun modul cu acest nume. EPERM Apelantul nu era privilegiat (nu avea capacitatea CAP_SYS_MODULE) sau descarcarea modulelor este dezactivata (a se vedea /proc/sys/kernel/modules_disabled in proc(5)). EWOULDBLOCK Alte module depind de acest modul; sau, O_NONBLOCK a fost specificat in flags, dar numarul de referine al acestui modul este diferit de zero i O_TRUNC nu a fost specificat in flags. STANDARDE Linux. ISTORIC Apelul de sistem delete_module() nu este acceptat de glibc. In antetele glibc nu este furnizata nicio declaraie, dar, printr-o ciudaenie 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 (inainte de glibc 2.23) sa declarai manual interfaa in codul dumneavoastra; alternativ, putei invoca apelul de sistem utilizand syscall(2). Linux 2.4 i versiunile anterioare In Linux 2.4 i versiunile anterioare, apelul de sistem avea un singur argument: int delete_module(const char *name); Daca name este NULL, toate modulele nefolosite marcate ,,auto-clean" (auto-curaare) sunt eliminate. Unele detalii suplimentare privind diferenele de comportament ale delete_module() in Linux 2.4 i versiunile anterioare nu sunt explicate in prezent in aceasta pagina de manual. NOTE Somnul neintrerupt care poate aparea daca O_NONBLOCK este omis din flags este considerat indezirabil, deoarece procesul care doarme este lasat intr-o stare de nestingherit. Ca i in Linux 3.7, specificarea O_NONBLOCK este opionala, dar in nucleele viitoare este posibil sa devina obligatorie. CONSULTAI I create_module(2), init_module(2), query_module(2), lsmod(8), modprobe(8), rmmod(8) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 delete_module(2)