BRK(2) | п═я┐п╨п╬п╡п╬п╢я│я┌п╡п╬ п©я─п╬пЁя─п╟п╪п╪п╦я│я┌п╟ Linux | BRK(2) |
п≤п°п╞¶
brk, sbrk - п╦п╥п╪п╣п╫п╣п╫п╦п╣ я─п╟п╥п╪п╣я─п╟ я│п╣пЁп╪п╣п╫я┌п╟ п╢п╟п╫п╫я▀я┘
п·п▒п≈п·п═¶
#include <unistd.h>
int brk(void *addr);
void *sbrk(intptr_t increment);
п╒я─п╣п╠п╬п╡п╟п╫п╦я▐
п╪п╟п╨я─п╬я│п╟
я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦я▐
я│п╡п╬п╧я│я┌п╡
п╢п╩я▐ glibc
(я│п╪. feature_test_macros(7)):
brk(), sbrk(): _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >=500
п·п÷п≤п║п░п²п≤п∙¶
brk() п╦ sbrk() п╦п╥п╪п╣п╫я▐п╣я┌ я─п╟я│п©п╬п╩п╬п╤п╣п╫п╦п╣ п╪п╟я─п╨п╣я─п╟ п╬п╨п╬п╫я┤п╟п╫п╦я▐ п©я─п╬пЁя─п╟п╪п╪я▀ (program break), п╨п╬я┌п╬я─я▀п╧ п╬п©я─п╣п╢п╣п╩я▐п╣я┌ п╨п╬п╫п╣я├ я│п╣пЁп╪п╣п╫я┌п╟ п╢п╟п╫п╫я▀я┘ п©я─п╬я├п╣я│я│п╟ (я┌.п╣., п╪п╟я─п╨п╣я─ п╬п╨п╬п╫я┤п╟п╫п╦я▐ — я█я┌п╬ п©п╣я─п╡п╟я▐ я┌п╬я┤п╨п╟ п©п╬я│п╩п╣ п╨п╬п╫я├п╟ я│п╣пЁп╪п╣п╫я┌п╟ п╫п╣п╦п╫п╦я├п╦п╟п╩п╦п╥п╦я─п╬п╡п╟п╫п╫я▀я┘ п╢п╟п╫п╫я▀я┘). пёп╡п╣п╩п╦я┤п╣п╫п╦п╣ п╪п╟я─п╨п╣я─п╟ п╬п╨п╬п╫я┤п╟п╫п╦я▐ п©я─п╬пЁя─п╟п╪п╪я▀ п©п╬п╥п╡п╬п╩я▐п╣я┌ п©я─п╬я├п╣я│я│я┐ п╡я▀п╢п╣п╩п╦я┌я▄ п©п╟п╪я▐я┌я▄; я┐п╪п╣п╫я▄я┬п╣п╫п╦п╣ п╪п╟я─п╨п╣я─п╟ п©я─п╦п╡п╬п╢п╦я┌ п╨ п╬я│п╡п╬п╠п╬п╤п╢п╣п╫п╦я▌ п©п╟п╪я▐я┌п╦.
brk() я┐я│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣я┌ п╨п╬п╫п╣я├ я│п╣пЁп╪п╣п╫я┌п╟ п╢п╟п╫п╫я▀я┘ п╡ п╥п╫п╟я┤п╣п╫п╦п╣, я┐п╨п╟п╥п╟п╫п╫п╬п╣ п╡ п╟я─пЁя┐п╪п╣п╫я┌п╣ addr, п╣я│п╩п╦ я█я┌п╬ п╥п╫п╟я┤п╣п╫п╦п╣ я▐п╡п╩я▐п╣я┌я│я▐ п©я─п╦п╣п╪п╩п╣п╪я▀п╪, я│п╦я│я┌п╣п╪п╟ п╦п╪п╣п╣я┌ п╢п╬я│я┌п╟я┌п╬я┤п╫п╬ п©п╟п╪я▐я┌п╦ п╦ п©я─п╬я├п╣я│я│ п╫п╣ п╢п╬я│я┌п╦пЁ п╪п╟п╨я│п╦п╪п╟п╩я▄п╫п╬ п╡п╬п╥п╪п╬п╤п╫п╬пЁп╬ я─п╟п╥п╪п╣я─п╟ я│п╡п╬п╣пЁп╬ я│п╣пЁп╪п╣п╫я┌п╟ п╢п╟п╫п╫я▀я┘ (я│п╪. setrlimit(2)).
sbrk() я┐п╡п╣п╩п╦я┤п╦п╡п╟п╣я┌ п©я─п╬я│я┌я─п╟п╫я│я┌п╡п╬ п╢п╟п╫п╫я▀я┘ п©я─п╬пЁя─п╟п╪п╪я▀ п╫п╟ increment п╠п╟п╧я┌. п▓я▀п╥п╬п╡ sbrk() я│ increment я─п╟п╡п╫я▀п╪ 0 п╪п╬п╤п╣я┌ п╠я▀я┌я▄ п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫ п╢п╩я▐ п╫п╟я┘п╬п╤п╢п╣п╫п╦я▐ я┌п╣п╨я┐я┴п╣пЁп╬ п╪п╣я│я┌п╬п©п╬п╩п╬п╤п╣п╫п╦я▐ п╪п╟я─п╨п╣я─п╟ п╬п╨п╬п╫я┤п╟п╫п╦я▐ п©я─п╬пЁя─п╟п╪п╪я▀.
п▓п·п≈п▓п═п░п╘п░п∙п°п·п∙ п≈п²п░п╖п∙п²п≤п∙¶
п▓ я│п╩я┐я┤п╟п╣ я┐я│п©п╣я┘п╟ brk() п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╫п╬п╩я▄. п▓ я│п╩я┐я┤п╟п╣ п╬я┬п╦п╠п╨п╦ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌я│я▐ -1, п╟ errno я│я┌п╟п╫п╬п╡п╦я┌я│я▐ я─п╟п╡п╫п╬п╧ ENOMEM. (п²п╬ я│п╪. п≈п╟п╪п╣я┤п╟п╫п╦я▐, п╨п╟я│п╟я▌я┴п╦п╣я│я▐ Linux п╢п╟п╩п╣п╣.)
п▓ я│п╩я┐я┤п╟п╣ я┐я│п©п╣я┘п╟ sbrk() п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п©я─п╣п╢я▀п╢я┐я┴п╦п╧ п╪п╟я─п╨п╣я─п╟ п╬п╨п╬п╫я┤п╟п╫п╦я▐ п©я─п╬пЁя─п╟п╪п╪я▀. (п∙я│п╩п╦ п╪п╟я─п╨п╣я─ п╬п╨п╬п╫я┤п╟п╫п╦я▐ п╠я▀п╩ я┐п╡п╣п╩п╦я┤п╣п╫, я┌п╬ я█я┌п╬ п╥п╫п╟я┤п╣п╫п╦п╣ я┐п╨п╟п╥я▀п╡п╟п╣я┌ п╫п╟ п╫п╟я┤п╟п╩п╬ п╫п╬п╡п╬п╧ п╡я▀п╢п╣п╩п╣п╫п╫п╬п╧ п©п╟п╪я▐я┌п╦). п▓ я│п╩я┐я┤п╟п╣ п╬я┬п╦п╠п╨п╦ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌я│я▐ (void *)-1, п╟ errno я│я┌п╟п╫п╬п╡п╦я┌я│я▐ я─п╟п╡п╫п╬п╧ ENOMEM.
п║п·п·п╒п▓п∙п╒п║п╒п▓п≤п∙ п║п╒п░п²п■п░п═п╒п░п°¶
4.3BSD; SUSv1, п©п╬п╪п╣я┤п╣п╫я▀ п╨п╟п╨ пёп║п╒п░п═п∙п▓п╗п≤п∙ п╡ SUSv2, я┐п╢п╟п╩п╣п╫я▀ п╦п╥ POSIX.1-2001.
п≈п░п°п∙п╖п░п²п≤п╞¶
п²п╣ п╦я│п©п╬п╩я▄п╥я┐п╧я┌п╣ brk() п╦ sbrk(): п╢п╩я▐ п╡я▀п╢п╣п╩п╣п╫п╦я▐ п©п╟п╪я▐я┌п╦ я└я┐п╫п╨я├п╦п╦ malloc(3) я▐п╡п╩я▐я▌я┌я│я▐ п╠п╬п╩п╣п╣ п©п╣я─п╣п╫п╬я│п╦п╪я▀п╪п╦ п╦ я┐п╢п╬п╠п╫я▀п╪п╦.
п▓ я─п╟п╥п╩п╦я┤п╫я▀я┘ я│п╦я│я┌п╣п╪п╟я┘ п╦я│п©п╬п╩я▄п╥я┐я▌я┌я│я▐ я─п╟п╥п╩п╦я┤п╫я▀п╣ я┌п╦п©я▀ п╢п╩я▐ п╟я─пЁя┐п╪п╣п╫я┌п╟ sbrk(). п·п╠я▀я┤п╫п╬ я█я┌п╬ int, ssize_t, ptrdiff_t, intptr_t.
п≈п╟п╪п╣я┤п╟п╫п╦я▐, п╨п╟я│п╟я▌я┴п╦п╣я│я▐ Linux¶
п▓п╬п╥п╡я─п╟я┴п╟п╣п╪п╬п╣ brk() п╥п╫п╟я┤п╣п╫п╦п╣, п╬п©п╦я│п╟п╫п╫п╬п╣ п╡я▀я┬п╣, п©я─п╣п╢п╬я│я┌п╟п╡п╩я▐п╣я┌я│я▐ п╬п╠я▒я─я┌п╬я┤п╫п╬п╧ я└я┐п╫п╨я├п╦п╣п╧ glibc п╨ я│п╦я│я┌п╣п╪п╫п╬п╪я┐ п╡я▀п╥п╬п╡я┐ Linux brk(). (п▓ п╠п╬п╩я▄я┬п╦п╫я│я┌п╡п╣ п╢я─я┐пЁп╦я┘ я─п╣п╟п╩п╦п╥п╟я├п╦п╧ п╡п╬п╥п╡я─п╟я┴п╟п╣п╪п╬п╣ brk() п╥п╫п╟я┤п╣п╫п╦п╣ я┌п╬ п╤п╣ я│п╟п╪п╬п╣; я█я┌п╬ п╥п╫п╟я┤п╣п╫п╦п╣ я┌п╟п╨п╤п╣ п╬п©п╦я│п╟п╫п╬ п╡ SUSv2.) п·п╢п╫п╟п╨п╬, я─п╣п╟п╩я▄п╫я▀п╧ я│п╦я│я┌п╣п╪п╫я▀п╧ п╡я▀п╥п╬п╡ Linux п╡ я│п╩я┐я┤п╟п╣ я┐я│п©п╣я┬п╫п╬пЁп╬ п╥п╟п╡п╣я─я┬п╣п╫п╦я▐ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╫п╬п╡я▀п╧ п╪п╟я─п╨п╣я─п╟ п╬п╨п╬п╫я┤п╟п╫п╦я▐ п©я─п╬пЁя─п╟п╪п╪я▀. п÷я─п╦ п╬я┬п╦п╠п╨п╣ я│п╦я│я┌п╣п╪п╫я▀п╧ п╡я▀п╥п╬п╡ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ я┌п╣п╨я┐я┴п╦п╧ п╪п╟я─п╨п╣я─ п╬п╨п╬п╫я┤п╟п╫п╦я▐. п·п╠я▒я─я┌п╬я┤п╫п╟я▐ я└я┐п╫п╨я├п╦я▐ glibc п╢п╣п╩п╟п╣я┌ я┌п╬ п╤п╣ я│п╟п╪п╬п╣ (я┌.п╣., п©я─п╬п╡п╣я─я▐п╣я┌ п╪п╣п╫я▄я┬п╣ п╩п╦ п╫п╬п╡я▀п╧ п╪п╟я─п╨п╣я─ я┤п╣п╪ addr), п╡п╬п╥п╡я─п╟я┴п╟я▐ п╥п╫п╟я┤п╣п╫п╦я▐ 0 п╦ -1 п╨п╟п╨ п╬п©п╦я│п╟п╫п╬ п╡я▀я┬п╣.
п▓ Linux, п╡я▀п╥п╬п╡ sbrk() я─п╣п╟п╩п╦п╥п╬п╡п╟п╫ п╡ п╡п╦п╢п╣ п╠п╦п╠п╩п╦п╬я┌п╣я┤п╫п╬п╧ я└я┐п╫п╨я├п╦п╦, п╨п╬я┌п╬я─п╟я▐ п╦я│п©п╬п╩я▄п╥я┐п╣я┌ я│п╦я│я┌п╣п╪п╫я▀п╧ п╡я▀п╥п╬п╡ brk() п╦ п╡п╣п╢я▒я┌ п╡п╫я┐я┌я─п╣п╫п╫п╦п╧ я┐я┤я▒я┌ п╢п╩я▐ п╡п╬п╥п╡я─п╟я┌п╟ я│я┌п╟я─п╬пЁп╬ п╥п╫п╟я┤п╣п╫п╦я▐ п╪п╟я─п╨п╣я─п╟ п╬п╨п╬п╫я┤п╟п╫п╦я▐.
п║п°п·п╒п═п≤п╒п∙ п╒п░п п√п∙¶
2008-06-18 | Linux |