xref: /original-bsd/lib/libc/sys/brk.2 (revision be7c7628)
1.\" Copyright (c) 1980, 1991 Regents of the University of California.
2.\" All rights reserved.
3.\"
4.\" %sccs.include.redist.man%
5.\"
6.\"     @(#)brk.2	6.5 (Berkeley) 03/10/91
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 (unilitialized 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 qetext + 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; -1 if the process requests more memory than
81than allowed by the system limit.
82The
83.Nm sbrk
84function returns 0 if successful, otherwise the error
85.Er EOPNOTSUPP
86is returned.
87.\" .Sh ERRORS
88.\" .Xr Sbrk
89.\" returns -1 if the break could not be set.
90.\" will fail and no additional memory will be allocated if
91.\" one of the following are true:
92.\" .Bl -tag -width [ENOMEM]
93.\" .It Bq Er ENOMEM
94.\" The limit, as set by
95.\" .Xr setrlimit 2 ,
96.\" was exceeded.
97.\" .It Bq Er ENOMEM
98.\" The maximum possible size of a data segment (compiled into the
99.\" system) was exceeded.
100.\" .It Bq Er ENOMEM
101.\" Insufficient space existed in the swap area
102.\" to support the expansion.
103.\" .El
104.Sh SEE ALSO
105.Xr execve 2 ,
106.Xr getrlimit 2 ,
107.Xr malloc 3 ,
108.Xr end 3
109.Sh BUGS
110Setting the break may fail due to a temporary lack of
111swap space.  It is not possible to distinguish this
112from a failure caused by exceeding the maximum size of
113the data segment without consulting
114.Xr getrlimit .
115.Sh HISTORY
116A
117.Nm
118function call appeared in Version 7 AT&T UNIX.
119