Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-4.1.3)
Apropos / Subsearch:
optional field

BRK(2)                        System Calls Manual                       BRK(2)

       brk, sbrk - change data segment size

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

       int brk(addr)
       caddr_t addr;

       caddr_t sbrk(incr)
       int incr;

       brk()  sets  the  system's idea of the lowest data segment location not
       used by the program (called the break) to addr (rounded up to the  next
       multiple of the system's page size).

       In the alternate function sbrk(), incr more bytes are added to the pro-
       gram's data space and a pointer  to  the  start  of  the  new  area  is

       When  a program begins execution using execve() the break is set at the
       highest location defined by the program and data storage areas.

       The getrlimit(2) system call may be used to determine the maximum  per-
       missible  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(),
       that  is  to say, "etext + rlim.rlim_max."  (See end(3) for the defini-
       tion of etext().)

       brk() returns:

       0      on success.

       -1     on failure and sets errno to indicate the error.

       sbrk() returns the old break value on success.  On failure, it  returns
       (caddr_t) -1 and sets errno to indicate the error.

       brk()  and  sbrk() will fail and no additional memory will be allocated
       if one of the following occurs:

       ENOMEM         The data segment size limit, as set by setrlimit()  (see
                      getrlimit(2)), would be exceeded.

                      The  maximum  possible  size of a data segment (compiled
                      into the system) would be exceeded.

                      Insufficient space exists in the swap  area  to  support
                      the expansion.

                      Out  of  address space; the new break value would extend
                      into an area of the address space defined by some previ-
                      ously established mapping (see mmap(2)).

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

       Programs  combining the brk() and sbrk() system calls and malloc() will
       not work.  Many library routines use malloc() internally, so use  brk()
       and sbrk() only when you know that malloc() definitely will not be used
       by any library routine.

       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().

                                21 January 1990                         BRK(2)