NAME

     brk, sbrk - change data segment size


SYNOPSIS

     #include <unistd.h>

     int brk(char *addr)

     char *sbrk(int incr)


DESCRIPTION

     Brk sets the system's idea of the lowest data segment  loca-
     tion  not  used  by  the program (called the break) to addr.
     Locations greater than addr 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 sbrk, incr 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 execve 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 sbrk.


RETURN VALUE

     The address of the new break is returned if brk succeeds; -1
     if  the  program requests more memory than the system limit.
     Sbrk returns -1 if the break could not be set.


ERRORS

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

     [ENOMEM]       The maximum possible size of a  data  segment
                    (as set by chmem(1)) was exceeded.

     [ENOMEM]       Insufficient virtual memory space existed  to
                    support the expansion.  (Minix-vmd)


SEE ALSO

     chmem(1), execve(2), malloc(3), end(3).


NOTES

     Minix-vmd rounds a small data segment limit up  to  3  mega-
     bytes.


BUGS

     Setting the break may fail due to a temporary lack  of  vir-
     tual  memory under Minix-vmd.  It is not possible to distin-
     guish this from a failure caused by  exceeding  the  maximum
     size of the data segment.