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