PROCPS(3) Library Functions Manual PROCPS(3)

procps - API (interfață de program) pentru a accesa informații la nivel de sistem din sistemul de fișiere „/proc”

Cinci interfețe distincte sunt reprezentate în acest rezumat și numite după fișierele pe care le accesează în pseudosistemul de fișiere „/proc”: diskstats, meminfo, slabinfo, stat și vmstat.

#include <libproc2/interfața_numită.h>
int procps_new   (struct info **info);
int procps_ref   (struct info  *info);
int procps_unref (struct info **info);
struct result *procps_get (
    struct info *info,
[   const char *name,      ]   doar interfața programului diskstats
    enum item item);
struct stack *procps_select (
    struct info *info,
[   const char *name,      ]   doar interfața programului diskstats
    enum item *items,
    int numitems);
struct reaped *procps_reap (
    struct info *info,
[   enum reap_type what,   ]   doar interfața programului stat
    enum item *items,
    int numitems);
struct stack **procps_sort (
    struct info *info,
    struct stack *stacks[],
    int numstacked,
    enum item sortitem,
    enum sort_order order);

Funcțiile și structurile de mai sus sunt generice, dar specificația interfața_numită ar fi, de asemenea, parte a oricăror identificatori. De exemplu, „procps_new” ar fi de fapt „procps_meminfo_new” și „info” ar fi cu adevărat „diskstats_info”, etc.

Același nume de interfața_numită este folosit în fiecare nume de fișier antet cu un sufix `.h'.

Legătură cu -lproc2.

Esențial pentru aceste interfețe este o structură simplă de „rezultat” care reflectă un „element” plus valoarea acestuia (într-o uniune cu tipuri de limbaj C standard ca membri). Toate structurile „rezultat” sunt alocate și furnizate automat de bibliotecă.

Prin specificarea unei matrice de „elemente”, aceste structuri pot fi organizate ca o „stivă”, cu potențialul de-a produce multe rezultate cu un singur apel către funcție. Astfel, o „stivă” poate fi văzută ca o înregistrare cu lungime variabilă al cărei conținut și ordine sunt determinate exclusiv de utilizator.

Ca parte a fiecărei interfețe există doi enumeratori unici. Elementele „noop” și „extra” există pentru a păstra valorile utilizatorului. Ele nu sunt niciodată definite de bibliotecă, dar rezultatul „extra” va fi redus la zero cu fiecare interacțiune cu bibliotecă.

Documentul de bază în dezvoltarea unui program de utilizator va fi fișierul antet interfața_numită. Acolo veți găsi elementele disponibile, tipul pe care acestea îl returnează (numele membrului structurii „rezultat)” și sursa acestor valori. Acolo sunt de asemenea documentați enumeratori și structuri suplimentare.

Următoarele linii, ar fi o secvență tipică de apeluri la aceste interfețe.

1. procps_new()
2. procps_get(), procps_select() sau procps_reap()
3. procps_unref()

Funcția get este folosită pentru a prelua o structură „rezultat” pentru un singur „element”. Alternativ, o macrocomandă GET este disponibilă atunci când doar valoarea returnată este de interes.

Funcția select poate prelua mai multe structuri „rezultat” într-o singură „stivă”.

Pentru rezultate variabile imprevizibile, interfețele diskstats, slabinfo și stat exportă o funcție reap. Este folosită pentru a prelua mai multe „stive” fiecare conținând mai multe structuri „rezultat”. Opțional, un utilizator poate alege să sorteze acele rezultate.

Pentru a exploata orice „stivă” și pentru a accesa structuri „rezultat” individuale, este necesar un relative_enum, așa cum se arată în macrocomanda VAL definită în fișierul antet. Astfel de valori ar putea fi codificate ca: de la 0 la numitems-1. Cu toate acestea, această nevoie este de obicei satisfăcută prin crearea propriilor enumeratori corespunzători ordinii matricei „elemente”.

Funcțiile new, ref, unref, get și select sunt disponibile în toate cele cinci interfețe.

Pentru funcțiile new și unref, trebuie furnizată adresa unui indicator de structură info. Cu new, acesta trebuie să fi fost inițializat la NULL. Cu unref va fi reinițializat la NULL dacă numărul de referințe ajunge la zero.

În cazul interfeței diskstats, un parametru name în funcțiile get și select identifică un nume de disc sau partiție

Pentru interfața stat, un parametru what în funcția reap identifică dacă trebuie adunate date doar pentru CPU-uri sau atât pentru CPU-uri cât și pentru nodurile NUMA.

Când se utilizează funcția sort, parametrii staks și numstacked ar fi în mod normal cei returnați în structura „reaped”.

Funcții care returnează un „int” (număr întreg)

O eroare va fi indicată printr-un număr negativ care este întotdeauna inversul unei valori binecunoscute a errno.h.

Succesul este indicat de o valoare de returnare zero. Cu toate acestea, funcțiile ref și unref returnează numărul de referințe curent al structurii info.

Funcții care returnează o „adresă”

O eroare va fi indicată printr-un indicator de returnare NULL cu motivul găsit în valoarea formală errno (număr eroare).

Succesul este indicat de un indicator către structura numită.

Pentru a ajuta la dezvoltarea programului, este prevăzută o facilitate care poate ajuta la asigurarea faptului că referințele la membrii „rezultate” sunt în concordanță cu așteptările bibliotecii. Această facilitate presupune că macrocomanda furnizată în fișierul antet va fi utilizată pentru a accesa valoarea „rezultat”.

Această caracteristică poate fi activată prin oricare dintre următoarele metode și orice discrepanțe vor fi scrise la ieșirea standard de eroare.

1)
Adaugă CFLAGS='-DXTRA_PROCPS_DEBUG' la orice alte opțiuni ./configure utilizate.
2)
Adaugă #include <procps/xtra-procps-debug.h> la orice program după comenzile include ale interfețelor numite.

Această caracteristică de verificare implică o suprasarcină substanțială. Prin urmare, este important ca aceasta să nu fie activată pentru o versiune de producție/lansare.

procps_misc(3), procps_pids(3), proc(5).

august 2022 libproc2