brk

Autres langues

Langue: ja

Version: 2003-11-01 (openSuse - 09/10/07)

Section: 2 (Appels système)

̾Á°

brk, sbrk - ¥Ç¡¼¥¿¡¦¥»¥°¥á¥ó¥È¤Î¥µ¥¤¥º¤ÎÊѹ¹¤¹¤ë

½ñ¼°

#include <unistd.h>

int brk(void *end_data_segment);

void *sbrk(intptr_t increment);

ÀâÌÀ

brk() ¤Ï¡¢¥Ç¡¼¥¿¡¦¥»¥°¥á¥ó¥È (data segment) ¤ÎºÇ¸å¤ò end_data_segment ¤Ç»ØÄꤷ¤¿ÃͤËÀßÄꤹ¤ë¡£ ¥·¥¹¥Æ¥à¤¬½½Ê¬¤Ê¥á¥â¥ê¤ò»ý¤Á¡¢ ¥×¥í¥»¥¹¤Î¥Ç¡¼¥¿¥µ¥¤¥º¤ÎºÇÂçÃͤòĶ¤¨¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢¤½¤ÎÃͤÏÍ­¸ú¤Ç¤¢¤ë¡£ (setrlimit(2) ¤ò»²¾È)¡£

sbrk() ¤Ï¡¢¥×¥í¥°¥é¥à¤Î¥Ç¡¼¥¿¶õ´Ö¤ò increment ¥Ð¥¤¥È¤À¤±Áý¤ä¤¹¡£ sbrk() ¤Ï¡¢¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤Ç¤Ï¤Ê¤¯¡¢C ¥é¥¤¥Ö¥é¥ê¤Ë¤¢¤ë¥é¥Ã¥Ñ¡¼ (wrapper) ¤Ç¤¢¤ë¡£ increment ¤ò 0 ¤Ë¤·¤Æ sbrk() ¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¡¢¥×¥í¥°¥é¥à¤Î¸½ºß¤Î¥Ö¥ì¡¼¥¯ (break) ¾ì½ê¤òÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤·¤¿¾ì¹ç¡¢ brk() ¤Ï 0 ¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤Î¾ì¹ç¤Ë¤Ï¡¢-1 ¤òÊÖ¤·¡¢ errno ¤Ë ENOMEM ¤òÀßÄꤹ¤ë (¤¿¤À¤·¡ÖLINUX ¤Ç¤ÎÃí°Õ¡×¤ò»²¾È¤¹¤ë¤³¤È)¡£

À®¸ù¤·¤¿¾ì¹ç¡¢ sbrk() ¤Ï¿·¤·¤¤Îΰè¤ÎÀèƬ¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤Î¾ì¹ç¤Ë¤Ï¡¢ -1 ¤òÊÖ¤·¡¢ errno ¤Ë ENOMEM ¤òÀßÄꤹ¤ë¡£

½àµò

4.3BSD, SUSv1. SUSv2 ¤Ç¤Ï¡Ö²áµî¤Î̾»Ä (LEGACY)¡×¤È°ÌÃÖÉÕ¤±¤é¤ì¤Æ¤ª¤ê¡¢ POSIX.1-2001 ¤Çºï½ü¤µ¤ì¤¿¡£

brk() ¤È sbrk() ¤Ï C µ¬³Ê (C Standard) ¤Ë¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£ ¤Þ¤¿ POSIX.1 µ¬³Ê¤«¤é¤Ï°Õ¿ÞŪ¤Ë½ü³°¤µ¤ì¤Æ¤¤¤ë (ÃÊÍî B.1.1.1.3, B.8.3.3 »²¾È)¡£

Ãí°Õ

¤¤¤í¤¤¤í¤Ê¥·¥¹¥Æ¥à¤Ë¤ª¤¤¤Æ¡¢ sbrk() ¤Î°ú¤­¿ô¤ËÍÍ¡¹¤Ê·¿¤¬»È¤ï¤ì¤Æ¤¤¤ë¡£ °ìÈÌŪ¤Ê¤Î¤Ï int, ssize_t, ptrdiff_t, intptr_t ¤Ç¤¢¤ë¡£

Linux ¤Ç¤ÎÃí°Õ

¾å¤ÇÀâÌÀ¤·¤¿ brk() ¤ÎÊÖ¤êÃͤˤĤ¤¤Æ¤ÎÆ°ºî¤Ï¡¢ Linux ¤Î brk() ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò¥é¥Ã¥×¤¹¤ë glibc ¤Î´Ø¿ô¤Ë¤è¤ë¤â¤Î¤Ç¤¢¤ë¡£ (¤½¤Î¾¤Î¿¤¯¤Î¼ÂÁõ¤Ç¤â¡¢ brk() ¤ÎÊÖ¤êÃͤϤ³¤ì¤ÈƱ¤¸¤Ç¤¢¤ë¡£) ¤·¤«¤·¡¢¼ÂºÝ¤Î Linux ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢À®¸ù¤·¤¿¾ì¹ç¡¢ ¥×¥í¥°¥é¥à¤Î¿·¤·¤¤¥Ö¥ì¡¼¥¯¤òÊÖ¤¹¡£ ¼ºÇÔ¤·¤¿¾ì¹ç¡¢¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¸½ºß¤Î¥Ö¥ì¡¼¥¯¤òÊÖ¤¹ (¤è¤Ã¤Æ¡¢ brk(0) ¤È¤¤¤¦¸Æ¤Ó½Ð¤·¤Ç¸½ºß¤Î¥Ö¥ì¡¼¥¯¤ò¼èÆÀ¤Ç¤­¤ë)¡£ glibc ¥é¥Ã¥Ñ¡¼´Ø¿ô¤ÏƱÍͤÎƯ¤­¤ò¤·¡¢ ¾å¤ÇÀâÌÀ¤·¤¿ 0 ¤È -1 ¤È¤¤¤¦ÊÖ¤êÃͤòÊÖ¤¹¡£

Linux ¤Ç¤Ï sbrk() ¤Ï brk() ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò»È¤¦¥é¥¤¥Ö¥é¥ê´Ø¿ô¤È¤·¤Æ¼ÂÁõ¤µ¤ì¤Æ¤ª¤ê¡¢ °ÊÁ°¤Î¥Ö¥ì¡¼¥¯¤ÎÃͤòÊÖ¤¹¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤ËÆâÉô¤ÇÄ´À°¤¬¹Ô¤ï¤ì¤Æ¤¤¤ë¡£

´ØÏ¢¹àÌÜ

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