getrlimit,  getrusage, setrlimit - get/set resource limits
       and usage


       #include <sys/time.h>
       #include <sys/resource.h>
       #include <unistd.h>

       int getrlimit (int resource, struct rlimit *rlim);
       int getrusage (int who, struct rusage *usage);
       int setrlimit (int resource, const struct rlimit *rlim);


       getrlimit  and  setrlimit  get  and  set  resource  limits
       respectively.  resource should be one of:

       RLIMIT_CPU     /* CPU time in seconds */
       RLIMIT_FSIZE   /* Maximum filesize */
       RLIMIT_DATA    /* max data size */
       RLIMIT_STACK   /* max stack size */
       RLIMIT_CORE    /* max core file size */
       RLIMIT_RSS     /* max resident set size */
       RLIMIT_NPROC   /* max number of processes */
       RLIMIT_NOFILE  /* max number of open files */
       RLIMIT_MEMLOCK /* max locked-in-memory address space*/
       RLIMIT_AS      /* address space (virtual memory) limit */

       A   resource  may  unlimited  if  you  set  the  limit  to
       RLIM_INFINITY.  RLIMIT_OFILE   is   the   BSD   name   for

       The rlimit structure is defined as follows :

            struct rlimit
                 rlim_t    rlim_cur;
                 rlim_t    rlim_max;

       getrusage  returns  the current resource usages, for a who
       of either RUSAGE_SELF or RUSAGE_CHILDREN.

            struct rusage
                 struct timeval ru_utime; /* user time used */
                 struct timeval ru_stime; /* system time used */
                 long ru_maxrss;          /* maximum resident set size */
                 long ru_ixrss;      /* integral shared memory size */
                 long ru_idrss;      /* integral unshared data size */
                 long ru_isrss;      /* integral unshared stack size */
                 long ru_minflt;          /* page reclaims */
                 long ru_majflt;          /* page faults */
                 long ru_oublock;         /* block output operations */
                 long ru_msgsnd;          /* messages sent */
                 long ru_msgrcv;          /* messages received */
                 long ru_nsignals;        /* signals received */
                 long ru_nvcsw;      /* voluntary context switches */
                 long ru_nivcsw;          /* involuntary context switches */


       On success, zero is returned.  On error, -1  is  returned,
       and errno is set appropriately.


       EFAULT rlim or usage points outside the accessible address

       EINVAL getrlimit  or  setrlimit  is  called  with  a   bad
              resource, or getrusage is called with a bad who.

       EPERM  A   non-superuser   tries  to  use  setrlimit()  to
              increase the soft or hard limit above  the  current
              hard  limit,  or  a  superuser  tries  to  increase
              RLIMIT_NOFILE above the current kernel maximum.


       SVr4, BSD 4.3


       ulimit(2), quotactl(2)