GETRLIMIT(2)

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

SYNOPSIS
#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);

DESCRIPTION
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 RLIMIT_NOFILE.

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_nswap;		/* swaps */
	long	ru_inblock;		/* block input operations */
	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 */
};

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

ERRORS

EFAULT
    rlim or usage points outside the accessible address space.

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.

CONFORMING TO
SVr4, BSD 4.3

NOTE
The above struct was taken from BSD 4.3 Reno. Not all fields are meaningful under Linux. Right now (Linux 2.4) only the fields ru_utime, ru_stime, ru_minflt, ru_majflt, and ru_nswap are maintained.

SEE ALSO
quotactl(2), ulimit(3)