xref: /original-bsd/lib/libc/sys/brk.2 (revision 65d10654)
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