Provided by: libstatgrab-dev_0.92.1-1.2build1_amd64 bug

NAME

       sg_intro - get system statistics

SYNOPSIS

       #include <statgrab.h>

DESCRIPTION

       The  statgrab  library  provides  a  cross-platform  interface  to getting system statistics. Each of the
       function calls to grab some statistics returns an array of structures. Functions which  return  always  a
       fixed  number  of  array  entries (typical one) won't take an additional parameter to store the number of
       array  entries,  others  will.  Anyway,  if  the  information  isn't  available  anymore,  you  can  call
       sg_get_nelements(). See the manual page for each individual function for more details on usage.

       For  each  statistic  type  there  are  two  functions available to fetch the data: sg_get_STATTYPE (e.g.
       sg_get_cpu_stats)  and  sg_get_STATTYPE_r  (e.g.   sg_get_cpu_stats_r).  The  difference   between   both
       interfaces is the ownership of the returned statistic structures: while the (well known) sg_get_cpu_stats
       returns a pointer to a memory area owned and controlled by the statgrab library, sg_get_cpu_stats_r  will
       return  a  pointer  to  a  memory area owned and controlled by the caller.  Storage owned by the statgrab
       library will be reused in follow-up calls to the same statistic grabbing function within the same thread.
       The  memory is freed when the thread ends. This could result in dangling pointers when you exchange those
       pointers between threads. Storage which is owned by the caller must be freed by the caller when it's  not
       used any more.

       sg_init()  must  be  the first function you call before you start to use libstatgrab; it performs all the
       one-time initialisation operations that need setuid/setgid privileges. For instance, on *BSD it  opens  a
       descriptor  to  be  able  to read kernel structures later on, and on Solaris it reads the device mappings
       that in some cases are only accessible by root (machines with a /dev/osa).  To handle this, each statgrab
       module  has  a  private  initialisation routine called by sg_init().  sg_init() takes an argument to tell
       whether initialisation errors of components shall  abort  the  library  initialisation  process  or  not.
       Regardless  of this value, the failing module initialisations will usually lead into (partially) unusable
       statistics. Once sg_init() has run, most of the other  libstatgrab  functions  no  longer  need  elevated
       privileges  (some  Unices require higher privileges to access command line argument of processes owned by
       other users, Linux doesn't deliver some network card information to  unprivileged  users,  etc.).  It  is
       therefore  a  good  idea  to  call  sg_drop_privileges(),  which  discards  setuid and setgid privileges,
       immediately after you call sg_init(), unless your application has a reason for needing setuid  or  setgid
       privileges.

       sg_shutdown()  should  be  the  very  last  statgrab library function you call. You shouldn't invoke this
       function when any thread is still existing which had made calls to the statgrab  library.  If  you  don't
       invoke sg_shutdown(), it's done automatically at_exit().

       Both,  sg_init()  and  sg_shutdown()  use  a  counter to prevent to early destruction of libstatgrab in a
       process where more than one component uses libstatgrab. This counter is guarded  by  a  mutual  exclusion
       semaphore when thread capabilities are built in.

       sg_init(),  sg_shutdown()  and  sg_drop_privileges()  return  SG_ERROR_NONE  on success, and any other on
       failure.

       For proper thread support, sg_lock_mutex() and sg_unlock_mutex() are available to  allow  locking  system
       functions which aren't thread safe. While it's generally not the wisest idea to mix calls to the statgrab
       library and similar calls to the system library, it  is  possible  to  protect  known  unsafe  functions.
       There's  currently  one  system API known to be not thread-safe: accessing utmp. The other non-threadsafe
       functionality used by the statgrab library is the global component management during initialisation (e.g.
       counting the number of calls to sg_init() to prevent first call to sg_shutdown() leaves the library in an
       unusable status).

       Mutex name: statgrab
       Protects: statgrab library globals

       Mutex name: utmp
       Protects: accessing login records

       There's currently no way to get a list of used mutex names, so  beg  that  any  author  which  adds  more
       semaphores to guard implementations is fair enough to add them here.

       It is the intended practice that whenever a libstatgrab function is called and subsequently fails that an
       appropriate error will be set.  Please use sg_get_error()  and  associates  to  get  informed  about  the
       individual circumstances of the error condition.

SEE ALSO

       libstatgrab(3)   sg_get_cpu_stats(3)   sg_get_disk_io_stats(3)   sg_get_fs_stats(3)   sg_get_host_info(3)
       sg_get_load_stats(3)   sg_get_mem_stats(3)    sg_get_network_io_stats(3)    sg_get_network_iface_stats(3)
       sg_get_page_stats(3)  sg_get_process_stats(3)  sg_get_swap_stats(3)  sg_get_user_stats(3) sg_get_error(3)
       sg_internal-intro(3)

WEBSITE

       ⟨https://libstatgrab.org/⟩