query_module(2)

NUME
query_module - interoghează nucleul pentru diverse lucruri referitoare la module

SINOPSIS
#include <linux/module.h>

[[depreciat]] int query_module(const char *name, int which,
                                void buf[.bufsize], size_t bufsize,
                                size_t *ret);

DESCRIERE
Notă: Acest apel de sistem este prezent numai înainte de Linux 2.6.

query_module() solicită informații de la nucleu despre modulele încărcabile. Informațiile returnate sunt plasate în memoria tampon indicată de buf. Apelantul trebuie să precizeze dimensiunea lui buf în bufsize. Natura și formatul exact al informațiilor returnate depind de operația specificată de which. Unele operații necesită ca name să identifice un modul încărcat în mod curent, altele permit ca name să fie NULL, indicând nucleul propriu-zis.

Următoarele valori pot fi specificate în which:

0   Returnează succes, dacă nucleul acceptă query_module(). Utilizată pentru a verifica disponibilitatea apelului de sistem.

QM_MODULES
    Returnează numele tuturor modulelor încărcate. Memoria tampon returnată constă dintr-o secvență de șiruri cu terminație nulă; ret este stabilit la numărul de module.

QM_DEPS
    Returnează numele tuturor modulelor utilizate de modulul indicat. Memoria tampon returnată constă dintr-o secvență cu terminație nulă; ret este stabilit la numărul de module.

QM_REFS
    Returnează numele tuturor modulelor care utilizează modulul indicat. Acesta este inversul lui QM_DEPS. Memoria tampon returnată constă dintr-o secvență cu terminație nulă; ret este stabilit la numărul de module.

QM_SYMBOLS
    Returnează simbolurile și valorile exportate de nucleu sau de modulul indicat. Memoria tampon returnată este o matrice de structuri de forma următoare

        struct module_symbol {
            unsigned long value;
            unsigned long name;
        };

    urmată de șiruri de caractere cu terminație nulă. Valoarea lui name este decalajul de caractere al șirului de caractere în raport cu începutul lui buf; ret este stabilit la numărul de simboluri.

QM_INFO
    Returnează diverse informații despre modulul indicat. Formatul memoriei tampon de ieșire este:

        struct module_info {
            unsigned long address;
            unsigned long size;
            unsigned long flags;
        };

    unde address este adresa nucleului la care se află modulul, size este dimensiunea modulului în octeți, iar flags este o mască de MOD_RUNNING, MOD_AUTOCLEAN și așa mai departe, care indică starea curentă a modulului (a se vedea fișierul sursă al nucleului Linux include/linux/module.h). ret este stabilit la dimensiunea structurii module_info.

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

EFAULT
    Cel puțin unul dintre name, buf sau ret se afla în afara spațiului de adrese accesibil programului.

EINVAL
    which nevalid; sau name este NULL (indicând „nucleul”), dar acest lucru nu este permis cu valoarea specificată pentru which.

ENOENT
    Nu există niciun modul cu acest nume name.

ENOSPC
    Dimensiunea memoriei tampon furnizate a fost prea mică. ret este stabilit la dimensiunea minimă necesară.

ENOSYS
    query_module() nu este compatibil cu această versiune a nucleului (de exemplu, Linux 2.6 sau o versiune ulterioară).

STANDARDE
Linux.

VERSIUNI
Eliminat în Linux 2.6.

Unele dintre informațiile care erau disponibile anterior prin query_module() pot fi obținute din /proc/modules, /proc/kallsyms și din fișierele din directorul /sys/module.

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

CONSULTAȚI ȘI
create_module(2), delete_module(2), get_kernel_syms(2), init_module(2), lsmod(8), modinfo(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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.