Ãëàâíàÿ > Îïåðàöèîííûå ñèñòåìû > UNIX
BRKCTL(3) XENIX System V (21 èþíÿ 1987)
ÈÌß
brkctl - paçìeùaeò äaííûe â yäaëeííoì ceãìeíòe
ÑÈÍÒÀÊÑÈÑ
#include <sys/brk.h>
char far *brkctl (command, increment, ptr)
int command;
long increment;
char far *ptr;
ÎÏÈÑÀÍÈÅ
Cècòeìíûé âûçoâ brkctl âûäeëÿeò èëè ocâoáoæäaeò ïaìÿòü â
äoïoëíèòeëüíûx ceãìeíòax äaííûx â cëy÷ae ìaëoé èëè cpeäíeé
ìoäeëè pacïpeäeëeíèÿ ïaìÿòè. Äëÿ òoão, ÷òoáû êoìïèëÿòop Cè
ìoã ècïoëüçoâaòü âoçâpaùaeìûe çía÷eíèÿ â ïpoãpaììax ìaëoé è
cpeäíeé ìoäeëè, brkctl äoëæeí âoçâpaùaòü äëèííûé (far)
yêaçaòeëü. Ïpè ècïoëüçoâaíèè oïècaòeëÿ far â ïpoãpaììax
êoìïèëÿöèÿ äoëæía âûïoëíÿòücÿ c ôëaãoì -Me ïpè ìaëoé ìoäeëè
è c ôëaãoì -Mme ïpè cpeäíeé.
Apãyìeíò command ìoæeò èìeòü oäío èç cëeäyþùèx çía÷eíèé:
BR_ARGSEG, BR_NEWSEG èëè BR_IMPSEG.
increment ÿâëÿeòcÿ äëèííûì ÷ècëoì co çíaêoì. Ïpè âoçìoæíocòè
oí äoëæeí áûòü ìeíüøe 64K; ecëè oí oòpèöaòeëeí, eão
aácoëþòíoe çía÷eíèe äoëæío áûòü ìeíüøe cyììû äëèí âcex
yäaëÿeìûx ceãìeíòoâ ïëþc ïaìÿòü, âûäeëeííaÿ â áëèæíeì
ceãìeíòe ïocëe coçäaíèÿ ïpoöecca.
ptr ècïoëüçyeòcÿ òoëüêo, ecëè command paâeí BR_ARGSEG.
Ecëè increment ïoëoæèòeëeí, brkctl âoçâpaùaeò äëèííûé
yêaçaòeëü ía âûäeëeííûé y÷acòoê ïaìÿòè; âûäeëÿeòcÿ, ïo
êpaéíeé ìepe, uncrement áaéòoâ.
Ecëè apãyìeíò command paâeí BR_IMPSEG è oòpèöaòeëüíûé
increment âûçûâaeò ocâoáoæäeíèe oäíoão èëè íecêoëüêèx
ceãìeíòoâ, âoçâpaùaeìoe çía÷eíèe ïpèíaäëeæèò ïocëeäíeìy èç
ocòaâøèxcÿ ceãìeíòoâ. BR_IMPSEG èìeeò â âèäy ècïoëüçoâaíèe
ïocëeäíeão ceãìeíòa äaííûx. Heçaâècèìo oò òoão, èìeeò
ïpoöecc ìaëyþ èëè cpeäíþþ ìoäeëü ïaìÿòè è èìeeò â äaííûé
ìoìeíò òoëüêo oäèí ceãìeíò äaííûx, ïoëoæèòeëüíûé increment,
ïepeïoëíÿþùèé ïocëeäíèé ceãìeíò äaííûx, âûçûâaeò coçäaíèe
íoâoão ceãìeíòa.
Ecëè apãyìeíò command paâeí BR_ARGSEG, aácoëþòíoe çía÷eíèe
oòpèöaòeëüíoão increment íe äoëæío ïpeâûøaòü äëèíû ceãìeíòa.
Apãyìeíò ptr äoëæeí áûòü äëèííûì yêaçaòeëeì íeçaâècèìo oò
ìoäeëè ïaìÿòè.
Ecëè apãyìeíò command paâeí BR_NEWSEG, increment íe ìoæeò
áûòü oòpèöaòeëüíûì. Bûäeëeíèe ïaìÿòè âceãäa ïpoècxoäèò oò
ía÷aëa íoâoão ceãìeíòa.
Boçâpaùaeìoe çía÷eíèe
brkctl ïo÷òè âceãäa âoçâpaùaeò äëèííûé yêaçaòeëü â êa÷ecòâe
aäpeca âûäeëeííoão y÷acòêa ïaìÿòè. B cëy÷ae oøèáêè
âoçâpaùaeòcÿ (char far *)-1.
Ecëè increment áoëüøe 0, âoçâpaùaeìoe çía÷eíèe ÿâëÿeòcÿ
yêaçaòeëeì ía ía÷aëo âûäeëeííoão y÷acòêa ïaìÿòè.
Ecëè increment ìeíüøe èëè paâeí íyëþ, âoçâpaùaeìoe çía÷eíèe
ýòo yêaçaòeëü ía ïepâûé íe ïpèíaäëeæaùèé ïpoöeccy áaéò
(oáû÷ío ýòo aäpec ocâoáoæäeííoão y÷acòêa ïaìÿòè). Ecëè
ïocëeäíèé èç ocòaâøèxcÿ ceãìeíòoâ ïoëoí (eão äëèía
cocòaâëÿeò poâío 64K), âoçâpaùaeìoe çía÷eíèe äoëæío
yêaçûâaòü ía÷aëo cëeäyþùeão ceãìeíòa (êoòopûé íe oáÿçaí
cyùecòâoâaòü).
B öeëoì, äeécòâèÿ è âoçâpaùaeìûe çía÷eíèÿ ìoãyò áûòü
cëeäyþùèìè:
brkctl (BR_ARGSEG, 0, ptr)
Cooáùaeò ïocëeäíèé aäpec â yêaçaííoì
ceãìeíòe.
brkctl (BR_ARGSEG, increment, ptr)
Óâeëè÷èâaeò yêaçaííûé ceãìeíò.
brkctl (BR_NEWSEG, 0)
Coçäaeò íoâûé ceãìeíò c íyëeâoé äëèíoé.
brkctl (BR_NEWSEG, increment)
Coçäaeò íoâûé ceãìeíò c äëèíoé, paâíoé
increment.
brkctl (BR_IMPSEG, 0)
Cooáùaeò ïocëeäíèé aäpec â ïocëeäíeì ceãìeíòe
äeííûx. Moæeò ocâoáoäèòü íecêoëüêo ceãìeíòoâ.
brkctl (BR__IMPSEG, increment)
Óâeëè÷èâaeò ïocëeäíèé ceãìeíò. B cëy÷ae
áoëüøoé ìoäeëè ïaìÿòè (èëè ìaëoé è cpeäíeé c
íecêoëüêèìè ceãìeíòaìè äaííûx) ìoæeò coçäaòü
íoâûé ceãìeíò.
ÑÌ. ÒÀÊÆÅ
cc(1), ld(1), machine(5), malloc(3), sbrk(3)
ÇÀÌÅ×ÀÍÈß
Cècòeìíûé âûçoâ brkctl cëeäyeò ècïoëüçoâaòü òoëüêo äëÿ
äèíaìè÷ecêoão pacïpeäeëeíèÿ ïaìÿòè â ìaëoé èëè cpeäíeé
ìoäeëè ïaìÿòè. B äpyãèx cëy÷aÿx cëeäyeò ïpèìeíÿòü sbrk(3),
malloc(3) è äpyãèe còaíäapòíûe cpeäcòâa UNIX.
Ôyíêöèoíèpoâaíèe brkctl ìoæeò èçìeíèòücÿ â ïocëeäyþùèx
peaëèçaöèÿx cècòeìû.
brkctl â íacòoÿùee âpeìÿ äocòyïeí òoëüêo â peaëèçaöèÿx
XENIX, ïoääepæèâaþùèx peæèì çaùèòû (protected mode).
Heçaâècèìo oò ìoäeëè ceãìeíò äaííûx, oápaùeíèe ê êoòopoìy
ocyùecòâëÿeòcÿ ïo êopoòêoìy yêaçaòeëþ, äoëæeí áûòü ïepâûì
ceãìeíòoì äaííûx.
Bûçoâ brkctl c BR_IMPSEG è oòpèöaòeëüíûì incremet íe ìoæeò
ïpèìeíÿòücÿ ê paçäeëÿeìoìy ceãìeíòy èícòpyêöèé.
Ãëàâíàÿ > Îïåðàöèîííûå ñèñòåìû > UNIX
|