|
|
1.1 ! root 1: .\" Copyright (c) 1980 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)brk.2 6.4 (Berkeley) 6/17/86 ! 6: .\" ! 7: .TH BRK 2 "June 17, 1986" ! 8: .UC 4 ! 9: .SH NAME ! 10: brk, sbrk \- change data segment size ! 11: .SH SYNOPSIS ! 12: .nf ! 13: #include <sys/types.h> ! 14: .PP ! 15: .ft B ! 16: char *brk(addr) ! 17: char *addr; ! 18: .PP ! 19: .ft B ! 20: char *sbrk(incr) ! 21: int incr; ! 22: .fi ! 23: .SH DESCRIPTION ! 24: .I Brk ! 25: sets the system's idea of the lowest data segment ! 26: location not used by the program (called the break) ! 27: to ! 28: .I addr ! 29: (rounded up to the next multiple of the system's page size). ! 30: Locations greater than ! 31: .I addr ! 32: and below the stack pointer ! 33: are not in the address space and will thus ! 34: cause a memory violation if accessed. ! 35: .PP ! 36: In the alternate function ! 37: .IR sbrk , ! 38: .I incr ! 39: more bytes are added to the ! 40: program's data space and a pointer to the ! 41: start of the new area is returned. ! 42: .PP ! 43: When a program begins execution via ! 44: .I execve ! 45: the break is set at the ! 46: highest location defined by the program ! 47: and data storage areas. ! 48: Ordinarily, therefore, only programs with growing ! 49: data areas need to use ! 50: .IR sbrk . ! 51: .PP ! 52: The current value of the program break is reliably returned by ! 53: ``sbrk(0)'' (see also ! 54: .IR end (3)). ! 55: The ! 56: .IR getrlimit (2) ! 57: system call may be used to determine ! 58: the maximum permissible size of the ! 59: .I data ! 60: segment; ! 61: it will not be possible to set the break ! 62: beyond the ! 63: .I rlim_max ! 64: value returned from a call to ! 65: .IR getrlimit , ! 66: e.g. \*(lqetext + rlp\(->rlim_max.\*(rq ! 67: (see ! 68: .IR end (3) ! 69: for the definition of ! 70: .IR etext ). ! 71: .SH "RETURN VALUE ! 72: Zero is returned if the ! 73: .I brk ! 74: could be set; ! 75: \-1 if the program requests more ! 76: memory than the system limit. ! 77: .I Sbrk ! 78: returns \-1 if the break could not be set. ! 79: .SH ERRORS ! 80: .I Sbrk ! 81: will fail and no additional memory will be allocated if ! 82: one of the following are true: ! 83: .TP 15 ! 84: [ENOMEM] ! 85: The limit, as set by ! 86: .IR setrlimit (2), ! 87: was exceeded. ! 88: .TP 15 ! 89: [ENOMEM] ! 90: The maximum possible size of a data segment (compiled into the ! 91: system) was exceeded. ! 92: .TP 15 ! 93: [ENOMEM] ! 94: Insufficient space existed in the swap area ! 95: to support the expansion. ! 96: .SH "SEE ALSO" ! 97: execve(2), getrlimit(2), malloc(3), end(3) ! 98: .SH BUGS ! 99: Setting the break may fail due to a temporary lack of ! 100: swap space. It is not possible to distinguish this ! 101: from a failure caused by exceeding the maximum size of ! 102: the data segment without consulting ! 103: .IR getrlimit .
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.