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
Including <sys/time.h> is not required these days, but increases portability. (Indeed, struct timeval is defined in <sys/time.h>.)

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)