Provided by: procps_4.0.3-1ubuntu1.23.10.1_amd64 bug

NAME

       procps - API to access system level information in the /proc filesystem

SYNOPSIS

       Five  distinct  interfaces are represented in this synopsis and named after the files they
       access in the /proc pseudo filesystem: diskstats, meminfo, slabinfo, stat and vmstat.

           #include <libproc2/named_interface.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,      ]   diskstats api only
               enum item item);

           struct stack *procps_select (
               struct info *info,
           [   const char *name,      ]   diskstats api only
               enum item *items,
               int numitems);

           struct reaped *procps_reap (
               struct info *info,
           [   enum reap_type what,   ]   stat api only
               enum item *items,
               int numitems);

           struct stack **procps_sort (
               struct info *info,
               struct stack *stacks[],
               int numstacked,
               enum item sortitem,
               enum sort_order order);

           The above functions and structures are generic but the specific named_interface  would
           also  be  part  of  any  identifiers.   For  example,  `procps_new'  would actually be
           `procps_meminfo_new' and `info' would really be `diskstats_info', etc.

           The same named_interface is used in each  header  file  name  with  an  appended  `.h'
           suffix.

           Link with -lproc2.

DESCRIPTION

   Overview
       Central  to  these interfaces is a simple `result' structure reflecting an `item' plus its
       value (in a union with standard C language types as members).  All `result' structures are
       automatically allocated and provided by the library.

       By  specifying  an  array  of  `items',  these  structures  can be organized as a `stack',
       potentially yielding many results with a single function call.  Thus,  a  `stack'  can  be
       viewed  as  a  variable  length record whose content and order is determined solely by the
       user.

       As part of each interface there are two unique enumerators.  The `noop' and `extra'  items
       exist to hold user values.  They are never set by the library, but the `extra' result will
       be zeroed with each library interaction.

       The named_interface header  file  will  be  an  essential  document  during  user  program
       development.   There you will find available items, their return type (the `result' struct
       member name) and the source for such values.  Additional enumerators  and  structures  are
       also documented there.

   Usage
       The following would be a typical sequence of calls to these interfaces.

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

       The  get  function  is  used  to  retrieve  a  `result'  structure  for  a  single `item'.
       Alternatively, a GET macro is available when only the return value is of interest.

       The select function can retrieve multiple `result' structures in a single `stack'.

       For unpredictable variable outcomes, the diskstats, slabinfo and stat interfaces export  a
       reap function.  It is used to retrieve multiple `stacks' each containing multiple `result'
       structures.  Optionally, a user may choose to sort those results.

       To exploit any `stack', and access individual  `result'  structures,  a  relative_enum  is
       required  as shown in the VAL macro defined in the header file.  Such values could be hard
       coded as: 0 through numitems-1.  However, this need is  typically  satisfied  by  creating
       your own enumerators corresponding to the order of the `items' array.

   Caveats
       The new, ref, unref, get and select functions are available in all five interfaces.

       For  the  new and unref functions, the address of an info struct pointer must be supplied.
       With new it must have been initialized to NULL.  With unref it will be reset  to  NULL  if
       the reference count reaches zero.

       In  the  case of the diskstats interface, a name parameter on the get and select functions
       identifies a disk or partition name

       For the stat interface, a what parameter on the reap function identifies whether data  for
       just CPUs or both CPUs and NUMA nodes is to be gathered.

       When using the sort function, the parameters stacks and numstacked would normally be those
       returned in the `reaped' structure.

RETURN VALUE

   Functions Returning an `int'
       An error will be indicated by a negative number that is always the inverse  of  some  well
       known errno.h value.

       Success  is indicated by a zero return value.  However, the ref and unref functions return
       the current info structure reference count.

   Functions Returning an `address'
       An error will be indicated by a NULL return pointer with the reason found  in  the  formal
       errno value.

       Success is indicated by a pointer to the named structure.

DEBUGGING

       To  aid  in program development, there is a provision that can help ensure `result' member
       references agree with library expectations.  It assumes  that  a  supplied  macro  in  the
       header file is used to access the `result' value.

       This   feature  can  be  activated  through  either  of  the  following  methods  and  any
       discrepancies will be written to stderr.

       1) Add CFLAGS='-DXTRA_PROCPS_DEBUG' to any other ./configure options employed.

       2) Add #include <procps/xtra-procps-debug.h> to any  program  after  the  named  interface
          includes.

       This verification feature incurs substantial overhead.  Therefore, it is important that it
       not be activated for a production/release build.

SEE ALSO

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