copyediting for Usenix manuals
[unix-history] / usr / src / lib / libc / sys / brk.2
CommitLineData
aaea5b2e
KB
1.\" Copyright (c) 1980, 1991, 1993
2.\" The Regents of the University of California. All rights reserved.
1423f0e0 3.\"
931b8415 4.\" %sccs.include.redist.man%
1423f0e0 5.\"
653ba8b6 6.\" @(#)brk.2 8.2 (Berkeley) %G%
931b8415
CL
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
653ba8b6 30of a process's data segment (uninitialized data) to
931b8415
CL
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
53d740be 57The current value of the program break is reliably returned by
931b8415
CL
58.Dq Li sbrk(0)
59(see also
60.Xr end 3 ) .
1423f0e0 61The
931b8415 62.Xr getrlimit 2
1423f0e0
KM
63system call may be used to determine
64the maximum permissible size of the
931b8415 65.Em data
1fa16506 66segment;
1423f0e0 67it will not be possible to set the break
1fa16506 68beyond the
931b8415 69.Em rlim_max
1fa16506 70value returned from a call to
931b8415
CL
71.Xr getrlimit ,
72e.g.
73.Dq qetext + rlp\(->rlim_max.
90f5cfd5 74(see
931b8415 75.Xr end 3
1423f0e0 76for the definition of
931b8415
CL
77.Em etext ) .
78.Sh RETURN VALUES
79.Nm Brk
869d4b7e
KM
80returns a pointer to the new end of memory if successful;
81otherwise -1 with
82.Va errno
83set to indicate why the allocation failed.
931b8415
CL
84The
85.Nm sbrk
869d4b7e
KM
86returns a pointer to the base of the new storage if successful;
87otherwise -1 with
88.Va errno
89set to indicate why the allocation failed.
90.Sh ERRORS
91.Xr Sbrk
92will fail and no additional memory will be allocated if
93one of the following are true:
94.Bl -tag -width [ENOMEM]
95.It Bq Er ENOMEM
96The limit, as set by
97.Xr setrlimit 2 ,
98was exceeded.
99.It Bq Er ENOMEM
100The maximum possible size of a data segment (compiled into the
101system) was exceeded.
102.It Bq Er ENOMEM
103Insufficient space existed in the swap area
104to support the expansion.
105.El
931b8415
CL
106.Sh SEE ALSO
107.Xr execve 2 ,
108.Xr getrlimit 2 ,
109.Xr malloc 3 ,
110.Xr end 3
111.Sh BUGS
1fa16506
KM
112Setting the break may fail due to a temporary lack of
113swap space. It is not possible to distinguish this
114from a failure caused by exceeding the maximum size of
115the data segment without consulting
931b8415
CL
116.Xr getrlimit .
117.Sh HISTORY
118A
119.Nm
120function call appeared in Version 7 AT&T UNIX.