brk(2) FreeBSD 一般コマンドマニュアル

brk

前のページ 上に戻る 次のページ

brk




書式

     #include <unistd.h>

     char *
     brk(const char *addr);

     char *
     sbrk(int incr);


解説

     brk() B>関B>数B>と sbrk() B>関B>数B>はB>、B>現B>代B>的B>なB>仮B>想B>メB>モB>リB>管B>理B>がB>現B>れB>るB>以B>前B>のB>、B>古B>いB>イ
     B>ンB>タB>フB>ェB>ーB>スB>でB>すB>。

     brk() 関数と sbrk() 関数は、プロセスのデータセグメントに割当てられたメモ
     リ量を変更するために使用されます。これは、 ``ブレーク'' 位置を移動するこ
     とで実現します。ブレークとは、プロセスの初期化されていないデータ (
     ``BSS'' としても知られています) の後の最初のアドレスのことです。

     brk() 関数は、ブレークを addr に設定します。

     sbrk() 関数は、ブレークを incr バイトだけ増し、結果として少なくとも incr
     バイトの新規メモリをデータセグメントに割当てます。 incr が負の場合、ブレ
     ークは incr バイトだけ減らされます。


     カーネルが管理する実際のプロセスデータセグメントサイズはページ単位でのみ
     増減しますが、これらの関数は、ブレークを境界にあわない値に設定することを
     許します (すなわち、データセグメントの最終ページ中の任意のアドレスを指し
     て構いません)。

     プログラムのブレークの現在値は、 sbrk(0) を呼び出すことで判定可能です。
     end(3) も参照してください。

     getrlimit(2) システムコールは、データセグメントの許容できる最大のサイズを
     決定するのに利用できます。 ``etext + rlim.rlim_max'' を越えるブレークを設
     定することはできません。 rlim.rlim_maxgetrlimit(RLIMIT_DATA, &rlim)
     の呼び出しから返された値です (etext の定義については end(3) を参照してく
     ださい)。


戻り値

     brk() 関数は、成功すると (char *)0 を返します。失敗すると値 (char *)-1 を
     返し、グローバル変数 errno にエラーを表す値を設定します。 sbrk() 関数は、
     成功すると古いブレーク値を返します。失敗すると、値 (char *)-1 が返し、グ
     ローバル変数 errno にエラーを表す値を設定します。


エラー

     brk() または sbrk() は、以降のうちの 1 つが真の場合に処理に失敗します:

     [EINVAL]           要求されたブレーク値がデータセグメントの先頭を越えてい
                        た。

     があります。これは getrlimit(2) を使用せずには、データセグメントの最大サ
     イズを越えたことに起因する失敗と区別することはできません。


歴史

     brk() 関数は Version 7 AT&T UNIX で登場しました。

FreeBSD 4.4                      July 12, 1999                     FreeBSD 4.4

ABELNET VPSサービス