Man page - brk(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru ro de

Manual

BRK

名 前
書 式
説 明
返 り 値
準 拠
注 意
C ラ イ ブ ラ リ と カ ー ネ ル の 違 い
関 連 項 目
こ の 文 書 に つ い て

名 前

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) の 場 所 を 変 更 す る 。 プ ロ グ ラ ム ブ レ ー ク は プ ロ セ ス の デ ー タ セ グ メ ン ト (data segment) の 末 尾 を 示 す (プ ロ グ ラ ム ブ レ ー ク は 、 初 期 化 さ れ て い な い デ ー タ セ グ メ ン ト の 末 尾 の 直 後 の 場 所 と な る )。 プ ロ グ ラ ム ブ レ ー ク を 増 や す と い う こ と は 、 そ の プ ロ セ ス へ の メ モ リ ー を 割 り 当 て る 効 果 が あ り 、 プ ロ グ ラ ム ブ レ ー ク を 減 ら す と い う こ と は 、 メ モ リ ー を 解 放 す る と い う こ と で あ る 。

brk () は 、 デ ー タ セ グ メ ン ト の 末 尾 を addr で 指 定 し た 値 に 設 定 す る 。 設 定 が 行 わ れ る の は 、 指 定 し た 値 が 有 効 で 、 シ ス テ ム に 十 分 な メ モ リ ー が あ り 、 プ ロ セ ス の デ ー タ サ イ ズ の 最 大 値 を 超 え て い な い 場 合 で あ る ( setrlimit (2) を 参 照 )。

sbrk () は 、 プ ロ グ ラ ム の デ ー タ 空 間 を increment バ イ ト だ け 増 や す 。 increment を 0 に し て sbrk () を 呼 び 出 す こ と で 、 プ ロ グ ラ ム の 現 在 の ブ レ ー ク (break) 場 所 を 知 る こ と が で き る 。

返 り 値

成 功 し た 場 合 、 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 で あ る 。

C ラ イ ブ ラ リ と カ ー ネ ル の 違 い

上 で 説 明 し た brk () の 返 り 値 に つ い て の 動 作 は 、 Linux の brk () シ ス テ ム コ ー ル を ラ ッ プ す る glibc の 関 数 に よ る も の で あ る 。 (そ の 他 の 多 く の 実 装 で も 、 brk () の 返 り 値 は こ れ と 同 じ で あ る 。 こ の 返 り 値 は SUSv2 で も 規 定 さ れ て い る 。 ) し か し 、 実 際 の Linux シ ス テ ム コ ー ル は 、 成 功 し た 場 合 、 プ ロ グ ラ ム の 新 し い ブ レ ー ク を 返 す 。 失 敗 し た 場 合 、 こ の シ ス テ ム コ ー ル は 現 在 の ブ レ ー ク を 返 す 。 glibc ラ ッ パ ー 関 数 は 同 様 の 働 き を し (す な わ ち 、 新 し い ブ レ ー ク が addr よ り 小 さ い か ど う か を チ ェ ッ ク し )、 上 で 説 明 し た 0 と -1 と い う 返 り 値 を 返 す 。

Linux で は sbrk () は brk () シ ス テ ム コ ー ル を 使 う ラ イ ブ ラ リ 関 数 と し て 実 装 さ れ て お り 、 以 前 の ブ レ ー ク の 値 を 返 す こ と が で き る よ う に 内 部 で 調 整 が 行 わ れ て い る 。

関 連 項 目

execve (2), getrlimit (2), end (3), malloc (3)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。