. . . ΠΏΡΠΎΡΠ΅ΡΡ 17977 ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ
pid 17977: 32
pid 17976: 33 ΡΠ΄ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄ΡΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ
. . . ΠΏΡΠΎΡΠ΅ΡΡ 17976 ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ
pid 17976: 707
pid 17978: 708 ΡΠ΄ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ
. . . ΠΏΡΠΎΡΠ΅ΡΡ 17978 ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ
pid 17978: 852
pid 17977: 853 ΡΠ΄ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ
. . . ΠΈ Ρ.Π΄.
pid 17977: 29997
pid 17977: 29999 ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ½ΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ.
13.6. ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ
ΠΠ·ΠΌΠ΅Π½ΠΈΠΌ Π½Π°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π‘Π½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ²Π΅Ρ, ΡΠΎΠ·Π΄Π°ΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. Π‘Π΅ΡΠ²Π΅Ρ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Ρ ΠΎΡΡ Π·Π°Π΄Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΎΠ±ΠΎΠ±ΡΠΈΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ» Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ Π΄Π΅ΠΌΠΎΠ½Ρ syslog, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΠ°Π½ Π² Π³Π»Π°Π²Π΅ 13 [24]. ΠΡ Π½Π°Π·ΡΠ²Π°Π΅ΠΌ Π³ΡΡΠΏΠΏΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΎΠ½ΠΈ ΠΈΠΌΠΈ ΠΈ ΡΠ²Π»ΡΡΡΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ²Π΅Ρ Telnet ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ Π΄Π΅ΠΌΠΎΠ½Π° syslog, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΅ΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π·Π°Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΠΆΡΡΠ½Π°Π».
ΠΠΌΠ΅ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² (ΡΠ°ΡΡΡ 2) Π±ΡΠ΄Π΅ΠΌ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΎ, ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΠΎΡΠΌΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΠΈΡΠ°ΡΡΠ΅Π³ΠΎ ΠΈΡ . ΠΠ° ΡΠΈΡ. 13.2 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΡ Π΅ΠΌΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅Π»ΠΎΠΌ.
Π ΠΈΡ. 13.2. ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΏΠ°ΠΌΡΡΡ
ΠΠ΅ΡΠ΅Π΄ Π½Π°ΠΌΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ (ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²) ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ (ΡΠ΅ΡΠ²Π΅Ρ). Π Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ².
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.8 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠ΅ΠΊΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° cliserv2.h, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΡΡΡΠΊΡΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Ρ ΡΠ°Π½ΠΈΠΌΠΎΠ³ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠΈΡΡΠΈΠ½Π³ 13.8. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ//pxshm/cliserv2.h
1 #include "unpipc.h"
2 #define MESGSIZE 256 /* ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π±Π°ΠΉΡΠ°Ρ , Π²ΠΊΠ»ΡΡΠ°Ρ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ Π½ΠΎΠ»Ρ */
3 #define NMESG 16 /* ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ */
4 struct shmstruct { /* ΡΡΡΡΠΊΡΡΡΠ°, Ρ ΡΠ°Π½ΡΡΠ°ΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ */
5 sem_t mutex; /* ΡΡΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Posix, ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌΡΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ */
6 sem_t nempty;
7 sem_t nstored;
8 int nput; /* ΠΈΠ½Π΄Π΅ΠΊΡ Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ */
9 long noverflow; /* ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ */
10 sem_t noverflowmutex; /* Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ */
11 long msgoff[NMESG]; /* ΡΠ΄Π²ΠΈΠ³ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ */
12 char msgdata[NMESG * MESGSIZE]; /* ΡΠ°ΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ */
13 };
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅5-8 Π’ΡΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Posix, ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅, Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π² Π·Π°Π΄Π°ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 10.6. ΠΡ ΠΈΠΌΠ΅Π½Π° mutex, nempty, nstored. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ nput Ρ ΡΠ°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ, ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π·Π°ΡΠΈΡΠ΅Π½Π° Π²Π·Π°ΠΈΠΌΠ½ΡΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π²ΠΌΠ΅ΡΡΠ΅ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ.
Π‘ΡΠ΅ΡΡΠΈΠΊ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ9-10 Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·-Π·Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ Π½Π΅Π³ΠΎ. ΠΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ²Π΅Ρ FTP ΠΈΠ»ΠΈ HTTP), ΠΎΠ½Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΠΊΠ»ΠΈΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½Π° ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π»Π°ΡΡ, Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π»Π° ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ (noverflow). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎΡ ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠΈΠΌ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΡΠΈΡΠ΅Π½ Π²Π·Π°ΠΈΠΌΠ½ΡΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½ΠΎ.
Π‘Π΄Π²ΠΈΠ³ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅11-12 ΠΠ°ΡΡΠΈΠ² msgoff ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΄Π²ΠΈΠ³ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ msgdata, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΡΠ°Π½ΡΡΡΡ ΠΏΠΎΠ΄ΡΡΠ΄. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ΄Π²ΠΈΠ³ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ msgoff[0] = 0, msgoff [1] = 256 (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ MESGSIZE), msgoff [2] = 512 ΠΈ Ρ. Π΄.
ΠΡΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΄Π²ΠΈΠ³ Π² ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ Π² ΡΠ°Π·Π½ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° (ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ²). ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ mmap Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠΌ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΡΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅.
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.9 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΏΠ°ΠΌΡΡΡ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΡ .
ΠΠΈΡΡΠΈΠ½Π³ 13.9. Π‘Π΅ΡΠ²Π΅Ρ, ΡΡΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ//pxshm/server2.c
1 #include "cliserv2.h"
2 int
3 main(int argc, char **argv)
4 {
5 int fd, index, lastnoverflow, temp;
6 long offset;
7 struct shmstruct *ptr;
8 if (argc != 2)
9 err_quit("usage: server2 <name>");
10 /* ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΡ, Π·Π°ΠΊΡΡΡΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° */
11 shm_unlink(Px_ipc_name(argv[1])); /* ΠΎΡΠΈΠ±ΠΊΠ° ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ */
12 fd = Shm_open(Px_ipc_name(argv[1]), O_RDWR | O_CREAT | O_EXCL, FILE_MODE);
13 ptr = Mmap(NULL, sizeof(struct shmstruct), PROT_READ | PROT_WRITE,
14 MAP_SHARED, fd, 0);
15 Ftruncate(fd, sizeof(struct shmstruct));
16 Close(fd);
17 /* ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ΄Π²ΠΈΠ³ΠΎΠ² */
18 for (index = 0; index < NMESG; index++)
19 ptr->msgoff[index] = index * MESGSIZE;
20 /* ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ */
21 Sem_init(&ptr->mutex, 1, 1);
22 Sem_init(&ptr->nempty, 1, NMESG);
23 Sem_init(&ptr->nstored, 1, 0);
24 Sem_init(&ptr->noverflowmutex, 1, 1);
25 /* ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ */
26 index = 0;
27 lastnoverflow = 0;
28 for (;;) {
29 Sem_wait(&ptr->nstored);
30 Sem_wait(&ptr->mutex);
31 offset = ptr->msgoff[index];
32 printf("index = %d: %s\n", index, &ptr->msgdata[offset]);
33 if (++index >= NMESG)
34 index =0; /* ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π±ΡΡΠ΅Ρ */
35 Sem_post(&ptr->mutex);
36 Sem_post(&ptr->nempty);
37 Sem_wait(&ptr->noverflowmutex);
38 temp = ptr->noverflow; /* Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ½ΠΈΠΌΠ΅ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ */
39 Sem_post(&ptr->noverflowmutex);
40 if (temp != lastnoverflow) {
41 printf("noverflow = %d\n", temp);
42 lastnoverflow = temp;
43 }
44 }
45 exit(0);
46 }
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ10-16 Π‘Π½Π°ΡΠ°Π»Π° Π΄Π΅Π»Π°Π΅ΡΡΡ Π²ΡΠ·ΠΎΠ² shm_unlink, ΡΡΠΎΠ±Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠ³ ΠΎΡΡΠ°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ shm_open ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠΌ mmap, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ΄Π²ΠΈΠ³ΠΎΠ²17-19 ΠΠ°ΡΡΠΈΠ² ΡΠ΄Π²ΠΈΠ³ΠΎΠ² ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΠ΄Π²ΠΈΠ³Π°ΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ²20-24 ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ ΡΠ΅ΡΡΡΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌΡΠ΅ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ sem_init Π²ΡΠ΅Π³Π΄Π° Π΄Π΅Π»Π°Π΅ΡΡΡ Π½Π΅Π½ΡΠ»Π΅Π²ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ.
ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π²ΡΠ²ΠΎΠ΄ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ25-36 ΠΠ΅ΡΠ²Π°Ρ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΠΈΠΊΠ»Π° for Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ: ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° nstored, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° mutex, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ , ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° nempty.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ37-43 ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΎΡ ΠΎΠ΄Π΅ ΡΠΈΠΊΠ»Π° ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π½Π°Π»ΠΈΡΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ. Π‘ΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ noverflows Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ, ΠΎΠ½ΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΊΡΠ°Π½ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π²Π·Π°ΠΈΠΌΠ½ΡΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ noverflowmutex, Π½ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ΄Π΅Ρ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅Π³Π΄Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΏΡΠ°Π²ΠΈΠ»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π²Π·Π°ΠΈΠΌΠ½ΡΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.10 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΠΈΡΡΠΈΠ½Π³ 13.10. ΠΠ»ΠΈΠ΅Π½Ρ, ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΠΈΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΏΠ°ΠΌΡΡΡ//pxshm/client2.c
1 #include "cliserv2.h"
2 int
3 main(int argc, char **argv)
4 {
5 int fd, i, nloop, nusec;
6 pid_t pid;
7 char mesg[MESGSIZE];
8 long offset;
9 struct shmstruct *ptr;
10 if (argc != 4)