brk(2) - wariua/manpages-ko GitHub Wiki
brk, sbrk - ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ ํฌ๊ธฐ ๋ฐ๊พธ๊ธฐ
#include <unistd.h>
int brk(void *addr);
void *sbrk(intptr_t increment);
glibc ๊ธฐ๋ฅ ํ์ธ ๋งคํฌ๋ก ์๊ฑด (feature_test_macros(7) ์ฐธ๊ณ ):
-
brk()
,sbrk()
: -
- glibc 2.19๋ถํฐ:
-
_DEFAULT_SOURCE ||
(_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L)
- glibc 2.12๋ถํฐ 2.19๊น์ง:
-
_BSD_SOURCE || _SVID_SOURCE ||
(_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L)
- glibc 2.12 ์ :
-
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500
brk()
์ sbrk()
๋ ํ๋ก๊ทธ๋จ ๋จ์ ์ (program break)์ ์์น๋ฅผ ๋ฐ๊พผ๋ค. ํ๋ก๊ทธ๋จ ๋จ์ ์ ์ ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ ๋์ ๊ท์ ํ๋ค. (์ฆ, ํ๋ก๊ทธ๋จ ๋จ์ ์ ์ ๋น์ด๊ธฐํ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ์ ๋ ๋ค์์ ์ฒซ ์์น์ด๋ค.) ํ๋ก๊ทธ๋จ ๋จ์ ์ ์ ์ฌ๋ฆฌ๋ฉด ํ๋ก์ธ์ค์๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ํจ๊ณผ๊ฐ ์๊ณ ๋จ์ ์ ์ ๋ด๋ฆฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๊ฒ์ด๋ค.
brk()
๋ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ์ ๋์ addr
์ ์ง์ ํ ๊ฐ์ผ๋ก ์ค์ ํ๋ค. ๋จ, ๊ทธ ๊ฐ์ด ์ ๋นํ๊ณ , ์์คํ
์ ์ถฉ๋ถํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๊ณ , ํ๋ก์ธ์ค๊ฐ ์๊ธฐ ์ต๋ ๋ฐ์ดํฐ ํฌ๊ธฐ(setrlimit(2) ์ฐธ๊ณ )๋ฅผ ์ด๊ณผํ์ง ์์์ผ ํ๋ค.
sbrk()
๋ ํ๋ก๊ทธ๋จ์ ๋ฐ์ดํฐ ๊ณต๊ฐ์ increment
๋ฐ์ดํธ๋งํผ ์ฌ๋ฆฐ๋ค. increment
๋ฅผ 0์ผ๋ก ํด์ sbrk()
๋ฅผ ํธ์ถํ๋ฉด ํ๋ก๊ทธ๋จ ๋จ์ ์ ์ ํ์ฌ ์์น๋ฅผ ์์๋ผ ์ ์๋ค.
์ฑ๊ณต ์ brk()
๋ 0์ ๋ฐํํ๋ค. ์ค๋ฅ ์ -1์ ๋ฐํํ๋ฉฐ errno
๋ฅผ ENOMEM
์ผ๋ก ์ค์ ํ๋ค.
์ฑ๊ณต ์ sbrk()
๋ ์ด์ ํ๋ก๊ทธ๋จ ๋จ์ ์ ์ ๋ฐํํ๋ค. (๋จ์ ์ ์ด ์ฆ๊ฐํ๋ค๋ฉด ์ด ๊ฐ์ ์๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ ๋ํ ํฌ์ธํฐ์ด๋ค.) ์ค๋ฅ ์ (void *) -1
์ ๋ฐํํ๋ฉฐ errno
๋ฅผ ENOMEM
์ผ๋ก ์ค์ ํ๋ค.
4.3BSD, SUSv1. SUSv2์์ LEGACY๋ก ํ์๋จ. POSIX.1-2001์์ ์ ๊ฑฐ๋จ.
brk()
์ sbrk()
์ฌ์ฉ์ ํผํ๋ผ. malloc(3) ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํจํค์ง๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ์ด์์ฑ ์๊ณ ํธ๋ฆฌํ ๋ฐฉ์์ด๋ค.
์ฌ๋ฌ ์์คํ
๋ค์์ sbrk()
์ธ์์ ๋ค์ํ ํ์
์ ์ด๋ค. ํํ๊ฒ๋ int
, ssize_t
, ptrdiff_t
, intptr_t
๊ฐ ์๋ค.
์์์ ๊ธฐ์ ํ brk()
๋ฐํ ๊ฐ์ ๋ฆฌ๋
์ค brk()
์์คํ
ํธ์ถ์ ์ํ glibc ๋ํผ ํจ์๊ฐ ์ ๊ณตํ๋ ๋์ ๋ฐฉ์์ด๋ค. (๋ค๋ฅธ ๋๋ถ๋ถ์ ๊ตฌํ์์๋ brk()
๋ฐํ ๊ฐ์ด ๊ทธ์ ๊ฐ๋ค. ์ด ๋ฐํ ๊ฐ์ด SUSv2์ ๋ช
์ธ๋๊ธฐ๋ ํ๋ค.) ํ์ง๋ง ์ค์ ๋ฆฌ๋
์ค ์์คํ
ํธ์ถ์ ์ฑ๊ณต ์ ์๋ก์ด ํ๋ก๊ทธ๋จ ๋จ์ ์ ์ ๋ฐํํ๋ค. ๊ทธ๋ฆฌ๊ณ ์คํจ ์ ์์คํ
ํธ์ถ์ ํ์ฌ ๋จ์ ์ ์ ๋ฐํํ๋ค. glibc ๋ํผ ํจ์์์ ์ฝ๊ฐ์ ์์
์ ํด์ (์ฆ ์ ๋จ์ ์ ์ด addr
๋ณด๋ค ์์์ง ํ์ธํด์) ์์ ๊ธฐ์ ํ 0๊ณผ -1 ๋ฐํ ๊ฐ์ ์ ๊ณตํ๋ค.
๋ฆฌ๋
์ค์์ sbrk()
๋ brk()
์์คํ
ํธ์ถ์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ก ๊ตฌํ๋์ด ์์ผ๋ฉฐ, ๋ด๋ถ์ ์ผ๋ก ์ด๋ค ์ํ ๊ด๋ฆฌ๋ฅผ ํด์ ์ด์ ๋จ์ ์ ๊ฐ์ ๋ฐํํ ์ ์๋๋ก ํ๋ค.
execve(2), getrlimit(2), end(3), malloc(3)
2016-03-15