4.3BSD-Reno/share/man/cat2/sbrk.0
BRK(2) 1986 BRK(2)
NNAAMMEE
brk, sbrk - change data segment size
SSYYNNOOPPSSIISS
#include <sys/types.h>
cchhaarr **bbrrkk((aaddddrr))
cchhaarr **aaddddrr;;
cchhaarr **ssbbrrkk((iinnccrr))
iinntt iinnccrr;;
DDEESSCCRRIIPPTTIIOONN
_B_r_k sets the system's idea of the lowest data segment loca-
tion not used by the program (called the break) to _a_d_d_r
(rounded up to the next multiple of the system's page size).
Locations greater than _a_d_d_r and below the stack pointer are
not in the address space and will thus cause a memory viola-
tion if accessed.
In the alternate function _s_b_r_k, _i_n_c_r more bytes are added to
the program's data space and a pointer to the start of the
new area is returned.
When a program begins execution via _e_x_e_c_v_e the break is set
at the highest location defined by the program and data
storage areas. Ordinarily, therefore, only programs with
growing data areas need to use _s_b_r_k.
The current value of the program break is reliably returned
by ``sbrk(0)'' (see also _e_n_d(3)). The _g_e_t_r_l_i_m_i_t(2) system
call may be used to determine the maximum permissible size
of the _d_a_t_a segment; it will not be possible to set the
break beyond the _r_l_i_m__m_a_x value returned from a call to
_g_e_t_r_l_i_m_i_t, e.g. "etext + rlp->rlim_max." (see _e_n_d(3) for the
definition of _e_t_e_x_t).
RREETTUURRNN VVAALLUUEE
Zero is returned if the _b_r_k could be set; -1 if the program
requests more memory than the system limit. _S_b_r_k returns -1
if the break could not be set.
EERRRROORRSS
_S_b_r_k will fail and no additional memory will be allocated if
one of the following are true:
[ENOMEM] The limit, as set by _s_e_t_r_l_i_m_i_t(2), was
exceeded.
[ENOMEM] The maximum possible size of a data segment
(compiled into the system) was exceeded.
Printed 7/27/90 June 1
BRK(2) 1986 BRK(2)
[ENOMEM] Insufficient space existed in the swap area
to support the expansion.
SSEEEE AALLSSOO
execve(2), getrlimit(2), malloc(3), end(3)
BBUUGGSS
Setting the break may fail due to a temporary lack of swap
space. It is not possible to distinguish this from a
failure caused by exceeding the maximum size of the data
segment without consulting _g_e_t_r_l_i_m_i_t.
Printed 7/27/90 June 2