Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (4.4BSD-Lite2)
Apropos / Subsearch:
optional field

BRK(2)                      BSD Programmer's Manual                     BRK(2)

     brk, sbrk - change data segment size

     #include <&lt;sys/types.h>&gt;

     *brk(const char *addr);

     char *
     *sbrk(int incr);

     The brk and sbrk functions are historical curiosities left over from ear-
     lier days before the advent of virtual memory management.   The brk()
     function sets the break or lowest address of a process's data segment
     (uninitialized data) to addr (immediately above bss).  Data addressing is
     restricted between addr and the lowest stack pointer to the stack seg-
     ment.  Memory is allocated by brk in page size pieces; if addr is not
     evenly divisible by the system page size, it is increased to the next
     page boundary.

     The current value of the program break is reliably returned by
     ``sbrk(0)'' (see also end(3)).  The getrlimit(2) system call may be used
     to determine the maximum permissible size of the data segment; it will
     not be possible to set the break beyond the rlim_max value returned from
     a call to getrlimit,  e.g.  ``etext + rlp->rlim_max.'' (see end(3) for
     the definition of etext).

     Brk returns 0 if successful; otherwise -1 with errno set to indicate why
     the allocation failed.  Sbrk returns a pointer to the base of the new
     storage if successful; otherwise -1 with errno set to indicate why the
     allocation failed.

     Brk or sbrk will fail and no additional memory will be allocated if one
     of the following are true:

     [ENOMEM]  The limit, as set by setrlimit(2),  was exceeded.

     [ENOMEM]  The maximum possible size of a data segment (compiled into the
               system) was exceeded.

     [ENOMEM]  Insufficient space existed in the swap area to support the ex-

     execve(2),  getrlimit(2),  malloc(3),  end(3)

     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 getrlimit.

     A brk function call appeared in Version 7 AT&T UNIX.

4th Berkeley Distribution         May 1, 1995                                1