Ãëàâíàÿ > Îïåðàöèîííûå ñèñòåìû > UNIX
SDGET(3) XENIX System V (21 èþíÿ 1987)
ÈÌß
sdget, sdfree - ïpècoeäèíÿeò è oòcoeäèíÿeò paçäeëÿeìûé ceãìeíò äaííûx
ÑÈÍÒÀÊÑÈÑ
#include <sys/sd.h>
char *sdget (path, flags, size[, mode])
char *path;
int flags, mode;
long size;
int sdfree (addr)
char *addr;
ÎÏÈÑÀÍÈÅ
Sdget ïpècoeäèíÿeò paçäeëÿeìûé ceãìeíò äaííûx ê ïpocòpaícòây
äaííûx òeêyùeão ïpoöecca. Ceãìeíò çaäaeòcÿ èìeíeì path.
Bûïoëíÿeìûe äeécòâèÿ oïpeäeëÿþòcÿ apãyìeíòoì flags, êoòopûé
còpoèòcÿ ëoãè÷ecêèì cëoæeíèeì cëeäyþùèx ôëaãoâ:
- SD_RDONLY
- Ïpècoeäèíèòü ceãìeíò òoëüêo äëÿ ÷òeíèÿ.
- SD_WRITE
- Ïpècoeäèíèòü ceãìeíò äëÿ ÷òeíèÿ è çaïècè.
- SD_CREAT
- Ecëè ceãìeíò cyùecòâyeò è íe ècïoëüçyeòcÿ
(íeaêòèâeí), äeécòâèe ýêâèâaëeíòío coçäaíèþ
ïycòoão ceãìeíòa. Èía÷e ceãìeíò coçäaeòcÿ â
cooòâeòcòâèè c size è mode. Çía÷eíèe mode
çaäaeò ïpaâa äpyãèx ïpoöeccoâ ïo ÷òeíèþ è
çaïècè ýòoão ceãìeíòa. Äoïycòèìû ôyíêöèè,
ïpèìeíÿeìûe ê oáû÷íûì ôaéëaì. Ïpaâo
âûïoëíeíèÿ ceãìeíòa ëèøeío cìûcëa. Ïocëe
coçäaíèÿ ceãìeíò èíèöèaëèçèpyeòcÿ íyëÿìè.
- SD_UNLOCK
- Hecêoëüêo ïpoöeccoâ ìoãyò èìeòü äocòyï ê
ceãìeíòy ìeæäy sdenter è sdleave.
Sdfree oòcoeäèíÿeò paçäeëÿeìûé ceãìeíò äaííûx oò òeêyùeão
ïpoöecca. Ceãìeíò çaäaeòcÿ aäpecoì ïpècoeäèíeíèÿ addr. Ecëè
òeêyùèé ïpoöecc cäeëaë paíee âûçoâ sdenter, ío íe cäeëaë
sdleave, ïepeä oòcoeäèíeíèeì ceãìeíòa aâòoìaòè÷ecêè
âûïoëíÿeòcÿ sdleave.
Koãäa íe ocòaeòcÿ áoëüøe ïpoöeccoâ, ïpècoeäèíèâøèx äaííûé
ceãìeíò, coäepæèìoe ceãìeíòa ïepecòaeò cyùecòâoâaòü è íè
oäèí ïpoöecc íe ìoæeò ïpècoeäèíèòü ceãìeíò áeç coçäaíèÿ eão
ïocpeäcòâoì sdget c ôëaãoì SD_CREAT. B errno çaíocèòcÿ êoä
oøèáêè EEXIST, ecëè ïpoöecc ïûòaeòcÿ coçäaòü paçäeëÿeìûé
ceãìeíò äaííûx, êoòopûé yæe cyùecòâyeò è ècïoëüçyeòcÿ. B
errno çaíocèòcÿ êoä oøèáêè ENOTNAM, ecëè ïpoöecc ïpèìeíÿeò
sdget ê ôaéëy, êoòopûé cyùecòâyeò, ío íe èìeeò òèï
paçäeëÿeìûx äaííûx.
ÇAÌE×AÍÈß
Ècïoëüçoâaíèe ôëaãa SD_UNLOCK èìeeò cìûcë â cècòeìe c
cooòâeòcòâyþùeé aïïapaòíoé ïoääepæêoé.
B cëy÷ae 286 ïpoöeccopa sdget è äpyãèe oïepaöèè c
paçäeëÿeìûìè ceãìeíòaìè äaííûx cëeäyeò ïpèìeíÿòü òoëüêo äëÿ
áoëüøoé ìoäeëè ïaìÿòè. Ïpoãpoaììû c ìaëoé è cpeäíeé
ìoäeëÿìè, ïûòaþùèecÿ ècïoëüçoâaòü paçäeëÿeìûe ceãìeíòû
äaííûx, íaòaëêèâaþòcÿ ía íexâaòêy ïaìÿòè. Aïïapaòypa 286
ïpoöeccopa íe ïoçâoëÿeò â cëy÷ae ìaëoé ìoäeëè peaëèçoâaòü
paçäeëÿeìûe ceãìeíòû äaííûx, ïpeäíaçía÷eííûe òoëüêo äëÿ
÷òeíèÿ. Oäíaêo, òaêèe ceãìeíòû peaëèçyþòcÿ â áoëüøoé
ìoäeëè.
B cëy÷ae 386 ïpoöeccopa aäpecíoe ïpocòpaícòâo 32-áèòoâoe è
paçäeëÿeìûe ceãìeíòû äaííûx ìoãyò ècïoëüçoâaòücÿ áeç
oãpaíè÷eíèé, câoécòâeííûx 286 ïpoöeccopy.
sdget aâòoìaòè÷ecêè yâeëè÷èâaeò ãpaíèöy ceãìeíòa äaííûx,
ycòaíaâëèâaÿ ee cpaçy ïocëe paçäeëÿeìoão ceãìeíòa äaííûx.
Ýòo âoçäeécòâyeò ía ïocëeäyþùèe âûçoâû sbrk è brk, êoòopûe
ïûòaþòcÿ âoccòaíoâèòü ïpeæíþþ ãpaíèöy. B ÷acòíocòè, ïoïûòêa
âoccòaíoâèòü ãpaíèöy, êoòopaÿ áûëa äo âûçoâa sdget, ïpèâoäèò
ê oøèáêe.
Ýòè cpeäcòâa cïeöèôè÷íû äëÿ XENIX è ìoãyò oòcyòcòâoâaòü â
äpyãèx peaëèçaöèÿx UNIX. Ïpoãpaììû, ècïoëüçyþùèe ýòè
ôyíêöèè, äoëæíû êoìïoíoâaòücÿ c ôëaãoì -lx.
Boçâpaùaeìoe çía÷eíèe
B cëy÷ae ycïeøíoão çaâepøeíèÿ âoçâpaùaeòcÿ aäpec
ïpècoeäèíeííoão ceãìeíòa. Èía÷e âoçâpaùaeòcÿ çía÷eíèe -1 è â
errno çaíocèòcÿ êoä oøèáêè. Oøèáêa EINVAL oçía÷aeò, ÷òo
ïpoöecc ïûòaeòcÿ ïpècoeäèíèòü yæe ïpècoeäèíeííûé ceãìeíò.
Oøèáêa EEXIST oçía÷aeò, ÷òo ïpoöecc ïûòaeòcÿ coçäaòü
ceãìeíò, êoòopûé yæe cyùecòâyeò è ècïoëüçyeòcÿ. Oøèáêa
ENOTNAM oçía÷aeò, ÷òo ïpoöecc ïpèìeíÿeò sdget ê ôaéëy,
êoòopûé cyùecòâyeò, ío íe èìeeò òèï paçäeëÿeìûx äaííûx.
Apãyìeíò mode äoëæeí ïpècyòcòâoâaòü â ïepâoì âûçoâe sdget.
ÑÌ. ÒÀÊÆÅ
sdenter(3), sdgetv(3), sbrk(2)
ÇAÌE×AÍÈß
Tèï apãyìeíòa size áûë unsigned â âepcèè 3.0 XENIX è còaë
long â XENIX System V. Xoòÿ ècïoëüçoâaíèe long size òpeáyeò
ìoäèôèêaöèè ècxoäíoão òeêcòa ïpè êoìïèëÿöèè c áèáèëèoòeêaìè
System V, òèï unsigned áyäeò êoppeêòío èíòepïpeòèpoâaòücÿ
ÿäpoì cècòeìû â ïpoãpaììax, cêoìïèëèpoâaííûx c áèáëèoòeêaìè
âepcèè 3.0.
Ãëàâíàÿ > Îïåðàöèîííûå ñèñòåìû > UNIX
|