[ Bottom of Page | Previous Page | Next Page | Contents | Index | Library Home |
Legal |
Search ]
Technical Reference: Base Operating System and Extensions, Volume 2
ulimit Subroutine
Purpose
Sets and gets user limits.
Library
Standard C Library (libc.a)
Syntax
The syntax for the ulimit subroutine
when the Command parameter specifies a value of GET_FSIZE or SET_FSIZE is:
#include <ulimit.h>
long int ulimit ( Command, NewLimit)
int Command;
off_t NewLimit;
The syntax for the ulimit subroutine
when the Command parameter specifies a value of GET_DATALIM, SET_DATALIM, GET_STACKLIM, SET_STACKLIM, GET_REALDIR, or SET_REALDIR is:
#include <ulimit.h>
long int ulimit (Command, NewLimit)
int Command;
unsigned long NewLimit;
Description
The ulimit subroutine controls
process limits.
Even with remote files, the ulimit subroutine values of the process on the client node are used.
Note
Raising the data ulimit does not necessarily raise the program
break value. If the proper memory segments are not initialized at program
load time, raising your memory limit will not allow access to this memory.
Also, without these memory segments initialized, the value returned after
such a change may not be the proper break value. If your data limit is RLIM_INFINITY,
this value will never advance past the segment size, even if that data is
available. Use the
-bmaxdata flag of the
ld command to set up these segments at load time.
Parameters
Command |
Specifies the form of control. The following Command parameter values require that the NewLimit parameter be declared as an off_t structure:
- GET_FSIZE (1)
- Returns the process file size limit. The limit is in units of UBSIZE blocks (see the sys/param.h file)
and is inherited by child processes. Files of any size can be read. The process
file size limit is returned in the off_t structure
specified by the NewLimit parameter.
- SET_FSIZE (2)
- Sets the process file size limit to the value in the off_t structure specified by the NewLimit parameter.
Any process can decrease this limit, but only a process with root user authority
can increase the limit. The new file size limit is returned.
The following Command parameter
values require that the NewLimit parameter be declared
as an integer:
- GET_DATALIM (3)
- Returns the maximum possible break value (as described in the brk or sbrk subroutine).
- SET_DATALIM (1004)
- Sets the maximum possible break value (described in the brk and sbrk subroutines). Returns the new maximum
break value, which is the NewLimit parameter rounded
up to the nearest page boundary.
- GET_STACKLIM (1005)
- Returns the lowest valid stack address.
Note
Stacks grow
from high addresses to low addresses.
- SET_STACKLIM (1006)
- Sets the lowest valid stack address. Returns the new minimum valid
stack address, which is the NewLimit parameter rounded
down to the nearest page boundary.
- GET_REALDIR (1007)
- Returns the current value of the real directory read flag. If this flag is a value of 0, a read system
call (or readx with Extension parameter
value of 0) against a directory returns fixed-format entries compatible with
the System V UNIX operating system. Otherwise, a read system call(or readx with Extension parameter value of 0) against a directory returns the underlying
physical format.
- SET_REALDIR (1008)
- Sets the value of the real directory read flag.
If the NewLimit parameter is a value of 0, this flag
is cleared; otherwise, it is set. The old value of the real
directory read flag is returned.
|
NewLimit |
Specifies the new limit. The value and data type or structure of
the NewLimit parameter depends on the Command parameter value that is used. |
Examples
To increase the size of the stack by 4096 bytes (use 4096 or PAGESIZE), and
set the rc to the new lowest valid stack address,
enter:
rc = ulimit(SET_STACKLIM, ulimit(GET_STACKLIM, 0) - 4096);
Return Values
Upon successful completion, the value of the requested
limit is returned. Otherwise, a value of -1 is returned and the errno global variable is set to indicate the error.
All return values are permissible if the ulimit subroutine is successful. To check for error situations, an application
should set the errno global variable to 0 before calling
the ulimit subroutine. If the ulimit subroutine returns a value of -1, the application should check the errno global variable to verify that it is nonzero.
Error Codes
The ulimit subroutine is unsuccessful
and the limit remains unchanged if one of the following is true:
EPERM |
A process without root user authority attempts to increase the file
size limit. |
EINVAL |
The Command parameter is a value other than GET_FSIZE, SET_FSIZE, GET_DATALIM, SET_DATALIM, GET_STACKLIM, SET_STACKLIM, GET_REALDIR,
or SET_REALDIR. |
Related Information
The brk subroutine, sbrk subroutine, getrlimit or setrlimit subroutine, pathconf subroutine, read (read, readx, readv, readvx, or pread Subroutine)
subroutines, vlimit subroutine, write (write, writex, writev, writevx or pwrite Subroutines) subroutine.
[ Top of Page | Previous Page | Next Page | Contents | Index | Library Home |
Legal |
Search ]