setrlimit(), setrlimit64()
Set the limit on a system resource
Synopsis:
#include <sys/resource.h>
int setrlimit( int resource,
const struct rlimit * rlp );
int setrlimit64( int resource,
const struct rlimit64 * rlp );
Arguments:
- resource
- The resource whose limit you want to set; one of the following:
- RLIMIT_AS
- RLIMIT_CHANNELS_NP
- RLIMIT_CORE
- RLIMIT_CPU
- RLIMIT_DATA
- RLIMIT_FREEMEM
- RLIMIT_FSIZE
- RLIMIT_MQUEUE_NUM_NP
- RLIMIT_MQUEUE_SIZE_NP
- RLIMIT_NOCONN_NP
- RLIMIT_NOFILE
- RLIMIT_NPROC
- RLIMIT_NTHR
- RLIMIT_OFILE
- RLIMIT_RSS
- RLIMIT_SHM_HANDLES_NP
- RLIMIT_SIGEVENT_NP
- RLIMIT_STACK
- RLIMIT_TIMERS_NP
- RLIMIT_VMEM
- rlp
- A pointer to an rlimit or rlimit64
structure that specifies the limit that you want to set for the resource.
The rlimit and rlimit64 structures
include at least the following members:
rlim_t rlim_cur; /* current (soft) limit */ rlim_t rlim_max; /* hard limit */
The rlim_t type is an arithmetic data type to which you can cast objects of type int, size_t, and off_t without loss of information.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The setrlimit() and setrlimit64() functions set the limits on the consumption of various system resources by a process and each process it creates.
Classificationin
What's in a Function Description?.
Each call to setrlimit() identifies a specific resource to be operated upon as well as a resource limit. A resource limit is a pair of values: one specifying the current (soft) limit, the other a maximum (hard) limit. The call to setrlimit() in turn calls prlimit() with the old_rlp argument set to NULL.
A process can change soft limits to any value
that's less than or equal to the hard limit. A process may
(irreversibly) lower its hard limit to any value that's
greater than or equal to the soft limit.
The caller requires the PROCMGR_AID_RLIMIT (rlimit) ability to raise a hard
limit. For more information, refer to the Abilities
section in the System Security Guide.
Both hard and soft limits can be changed in a single
call to setrlimit(), subject to the constraints described above.
Limits may have an infinite
value of RLIM_INFINITY.
The values of the current limit of the following resources affect these parameters:
Resource | Parameter |
---|---|
RLIMIT_NOFILE | OPEN_MAX |
When you're using the setrlimit() function, if the requested new limit is RLIM_INFINITY, there's no new limit; otherwise, if the requested new limit is RLIM_SAVED_MAX, the new limit is the corresponding saved hard limit; otherwise, if the requested new limit is RLIM_SAVED_CUR, the new limit is the corresponding saved soft limit; otherwise, the new limit is the requested value. In addition, if the corresponding saved limit can be represented correctly in an object of type rlim_t, then it's overwritten with the new limit.
The result of setting a limit to RLIM_SAVED_MAX or RLIM_SAVED_CUR is undefined unless a previous call to getrlimit() returned that value as the soft or hard limit for the corresponding resource limit.
A limit whose value is greater than RLIM_INFINITY is permitted.
The exec* family of functions also cause resource limits to be saved.
Returns:
- 0
- Success.
- -1
- An error occurred (errno is set).
Errors:
- EFAULT
- The rlp argument points to an illegal address.
- EINVAL
- An invalid resource was specified, the new rlim_cur exceeds the new rlim_max, or the limit specified can't be lowered because current usage is already higher than the limit.
- EPERM
- The limit specified to setrlimit() would have raised the maximum limit value, and the calling process doesn't have the required permission; see procmgr_ability().
Classification:
setrlimit() is POSIX 1003.1; setrlimit64() is Large-file support
Safety: | |
---|---|
Cancellation point | No |
Signal handler | Yes |
Thread | Yes |