ΠΡΠΎΠΌΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΌΠΎΠ³ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ ΡΠ΅ΡΠ΅Π· ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΎΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΎΠ±ΠΌΠ΅Π½ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° IPC. ΠΠΎ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ²ΡΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΡΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ:
- β’ shmgetQ — ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΡΡΠ΅Π·ΠΊΠ° ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ;
- β’ shmat () — ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ;
- β’ shmdt () — ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°;
- β’ shmctl () — ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ.
ΠΡΠΎΡΠ΅ΡΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ Π΄Π°Π½Π½ΡΡ
Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΅ ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅ ΠΌΠ°ΡΠΈΠ½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΡΠΎ ΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ. ΠΠΎΡΠ»Π΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π»ΡΠ±ΠΎΠΌΡ ΡΡΠ°ΡΡΠΊΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΠΌΡΡ Π² Π½Π΅ΠΉ Π΄Π°Π½Π½ΡΠΌ Π½Π΅ Π½ΡΠΆΠ½Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ shmget ():
shmid = shmget (key, size, flag);
Π³Π΄Π΅ size — ΠΎΠ±ΡΠ΅ΠΌ ΠΎΠ±Π»Π°ΡΡΠΈ Π² Π±Π°ΠΉΡΠ°Ρ
. Π―Π΄ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ key Π΄Π»Ρ Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: Π΅ΡΠ»ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠ°Ρ Π·Π°ΠΏΠΈΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π° ΠΈ Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΡΡΡΠΏ ΠΈΠΌΠ΅Π΅ΡΡΡ, ΡΠΎ ΡΠ΄ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π² Π·Π°ΠΏΠΈΡΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅:
int open segment^ keyt keyval, int segsize)
{
int shmid;
if ((shmid = shmget (keyval, segsize,
IPC CREAT I 0660)) = -1)
{.
retum (-1);
}.
retum (shmid) ;
}.
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² shmat () ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
int shmctl (int shmid, int and, struct shmid_ds *buff);
Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ
Π° ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°Π΄ΡΠ΅Ρ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π±ΡΠ» ΠΏΡΠΈΠ²ΡΠ·Π°Π½ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΈ -1 — Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΡΠΎΡ Π²ΡΠ·ΠΎΠ², ΠΏΠΎΠΆΠ°Π»ΡΠΉ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ. ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°Π΄ΡΠ΅Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΏΠΎ Π΅Π³ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΌΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ:
ΠΡΠ·ΠΎΠ² ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ shmctlf) ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄:
intshmat (int shmid, char *shmaddr, int shmflg);
ΠΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ
Π° 0 ΠΈ -1 — Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΡΠ·ΠΎΠ² ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆ Π½Π° msgctl (), Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π΄Π»Ρ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
Π‘Π½ΡΡΠΈΠ΅ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² shmdt():
int shmdt (char *shmaddr);
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ -1 Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΉ ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΏΠ°ΠΌΡΡΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ shmdt ().