PROCPS(3) Library Functions Manual PROCPS(3) NAZWA procps - API do dostepu do informacji systemowych w systemie plikow /proc SKLADNIA W niniejszym opisie jest reprezentowanych piec roznych interfejsow, nazwanych od plikow sluzacych do dostepu w pseudo systemie plikow /proc: diskstats, meminfo, slabinfo, stat oraz vmstat. #include 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, ] tylko API diskstats enum item item); struct stack *procps_select ( struct info *info, [ const char *name, ] tylko API diskstats enum item *items, int numitems); struct reaped *procps_reap ( struct info *info, [ enum reap_type what, ] tylko API 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); Powyzsze funkcje i struktury sa ogolne, ale konkretne interfejsy staja sie czescia identyfikatorow. Np. `procps_new' wlasciwie staje sie `procps_meminfo_new', `info' staje sie `diskstats_info' itd. Ten sam interfejs jest uzywany w nazwie kazdego pliku naglowkowego z dodanym rozszerzeniem `.h'. Konsolidowac z -lproc2. OPIS Przeglad Interfejsy te opieraja sie na prostej strukturze `result', odzwierciedlajacej element `item' wraz z jego wartoscia (w unii ze standardowymi typami C jako skladowymi). Wszystkie struktury `result' sa automatycznie przydzielane i dostarczane przez biblioteke. Podajac tablice elementow `item', struktury te moga byc zorganizowane w "stos", potencjalnie zwracajac wiele wynikow w pojedynczym wywolaniu funkcji. W ten sposob na "stos" mozna patrzec jak na rekord zmiennej dlugosci, ktorego zawartosc i porzadek sa okreslane wylacznie przez uzytkownika. Czescia kazdego interfejsu jest para unikatowych enumeratorow. Elementy `noop' i `extra' istnieja w celu trzymania wartosci uzytkownika. Nie sa nigdy ustawiane przez biblioteke, ale wynik `extra' jest zerowany przy kazdej interakcji z biblioteka. Plik naglowkowy interfejsu jest podstawowym dokumentem przy tworzeniu programu uzytkownika. Tam mozna zalezc dostepne elementy, ich typ zwracany (nazwe skladowej struktury `result') oraz zrodla tych wartosci. Tam tez sa udokumentowane dodatkowe enumeratory czy struktury. Uzycie Ponizej znajduje sie typowa sekwencja wywolan tych intefejsow. 1. procps_new() 2. procps_get(), procps_select() lub procps_reap() 3. procps_unref() Funkcja get sluzy do odczytania struktury `result' dla pojedynczego elementu `item'. Alternatywnie dostepne jest makro GET, kiedy istotna jest tylko wartosc zwracana. Funkcja select potrafi odczytac wiele struktur `result' z pojedynczego "stosu". Na potrzeby nieprzewidywalnych, zmiennych wynikow, interfejsy diskstats, slabinfo oraz stat eksportuja funkcje reap. Sluzy do odczytania wielu "stosow", zawierajacych wiele struktur `result'. Opcjonalnie uzytkownik moze zdecydowac, aby wykonac sort tych wynikow. Aby wykorzystac dowolny "stos" i dostac sie do poszczegolnych struktur `result', wymagana jest wartosc relative_enum, jak widac w makrze VAL zdefiniowanym w pliku naglowkowym. Takie wartosci moga byc sztywno zakodowane od 0 do numitems-1. Zwykle jednak te potrzebe zaspokaja sie tworzac wlasne enumeratory odpowiadajace kolejnosci tablicy `items'. Zastrzezenia Funkcje new, ref, unref, get oraz select sa dostepne we wszystkich pieciu interfejsach. W przypadku funkcji new i unref, trzeba przekazac adres wskaznika do struktury info. W przypadku new musi byc zainicjowany na NULL. W przypadku unref zostanie ustawiony na NULL, jesli licznik odwolan osiagnie zero. W przypadku interfejsu diskstats, parametr name funkcji get i select okresla nazwe dysku lub partycji W przypadku interfejsu stat, parametr what funkcji reap okresla, czy zebrane maja byc dane tylko dla CPU, czy dla CPU oraz NUMA. Przy uzywaniu funkcji sort, parametry stacks i numstacked sa zwykle zwracame w strukturze `reaped'. WARTOSC ZWRACANA Funkcje zwracajace `int' Blad jest oznaczany poprzez liczbe ujemna, bedaca liczba przeciwna do znanej wartosci errno.h. Sukces jest oznaczany wartoscia zerowa. Jednak funkcje ref i unref zwracaja biezacy licznik odwolan struktury info. Funkcje zwracajace adres Blad jest oznaczany zwracanym wskaznikiem NULL, a powod mozna znalezc w wartosci errno. Sukces jest oznaczany wskaznikiem na nazwana strukture. DIAGNOSTYKA Aby pomoc przy rozwijaniu programow, jest udogodnienie pozwalajace zapewnic, ze odwolania do skladowej `result' zgadzaja sie z oczekiwaniami biblioteki. Zaklada, ze do dostepu do wartosci `result' jest uzywane makro udostepnione w pliku naglowkowym. Te opcje mozna wlaczyc w jeden z ponizszych sposobow, a wszystkie niezgodnosci beda wypisane na stderr. 1) Dodanie CFLAGS='-DXTRA_PROCPS_DEBUG' do pozostalych uzytych opcji ./configure. 2) Dodanie #include do dowolnego programu po naglowkach nazwanych interfejsow. Ta opcja weryfikacji dodaje istotny narzut. W zwiazku z tym wazne jest, zeby nie byla wlaczona w binariach produkcyjnych. ZOBACZ TAKZE procps_misc(3), procps_pids(3), proc(5). libproc2 Sierpien 2022 PROCPS(3)