1.\" Copyright (c) 1980, 1991, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" %sccs.include.redist.man% 5.\" 6.\" @(#)brk.2 8.4 (Berkeley) 05/01/95 7.\" 8.Dd 9.Dt BRK 2 10.Os BSD 4 11.Sh NAME 12.Nm brk , 13.Nm sbrk 14.Nd change data segment size 15.Sh SYNOPSIS 16.Fd #include <sys/types.h> 17.Ft char 18.Fn *brk "const char *addr" 19.Ft char * 20.Fn *sbrk "int incr" 21.Sh DESCRIPTION 22.Bf -symbolic 23The brk and sbrk functions are historical curiosities 24left over from earlier days before the advent of virtual memory management. 25.Ef 26The 27.Fn brk 28function 29sets the break or lowest address 30of a process's data segment (uninitialized data) to 31.Fa addr 32(immediately above bss). 33Data addressing is restricted between 34.Fa addr 35and the lowest stack pointer to the stack segment. 36Memory is allocated by 37.Fa brk 38in page size pieces; 39if 40.Fa addr 41is not evenly divisible by the system page size, it is 42increased to the next page boundary. 43.Pp 44.\" The 45.\" .Nm sbrk 46.\" function 47.\" allocates chunks of 48.\" .Fa incr 49.\" bytes 50.\" to the process's data space 51.\" and returns an address pointer. 52.\" The 53.\" .Xr malloc 3 54.\" function utilizes 55.\" .Nm sbrk . 56.\" .Pp 57The current value of the program break is reliably returned by 58.Dq Li sbrk(0) 59(see also 60.Xr end 3 ) . 61The 62.Xr getrlimit 2 63system call may be used to determine 64the maximum permissible size of the 65.Em data 66segment; 67it will not be possible to set the break 68beyond the 69.Em rlim_max 70value returned from a call to 71.Xr getrlimit , 72e.g. 73.Dq etext + rlp\(->rlim_max. 74(see 75.Xr end 3 76for the definition of 77.Em etext ) . 78.Sh RETURN VALUES 79.Nm Brk 80returns 0 if successful; 81otherwise -1 with 82.Va errno 83set to indicate why the allocation failed. 84.Nm Sbrk 85returns a pointer to the base of the new storage if successful; 86otherwise -1 with 87.Va errno 88set to indicate why the allocation failed. 89.Sh ERRORS 90.Xr Brk 91or 92.Xr sbrk 93will fail and no additional memory will be allocated if 94one of the following are true: 95.Bl -tag -width [ENOMEM] 96.It Bq Er ENOMEM 97The limit, as set by 98.Xr setrlimit 2 , 99was exceeded. 100.It Bq Er ENOMEM 101The maximum possible size of a data segment (compiled into the 102system) was exceeded. 103.It Bq Er ENOMEM 104Insufficient space existed in the swap area 105to support the expansion. 106.El 107.Sh SEE ALSO 108.Xr execve 2 , 109.Xr getrlimit 2 , 110.Xr malloc 3 , 111.Xr end 3 112.Sh BUGS 113Setting the break may fail due to a temporary lack of 114swap space. It is not possible to distinguish this 115from a failure caused by exceeding the maximum size of 116the data segment without consulting 117.Xr getrlimit . 118.Sh HISTORY 119A 120.Nm 121function call appeared in Version 7 AT&T UNIX. 122