Β exit(1);Β }Β /* ΠΡΠΎΡΠΈΡΠ°Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ("ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉ, ΠΠΈΡ!") ΠΈ Π²ΡΠ²Π΅Π΄Π΅ΠΌ Π΅Π³ΠΎΒ Β Β Π½Π° ΡΠΊΡΠ°Π½ */Β while ((n = read(readfd, buff, MAXBUFF)) > 0)Β if {write(1, buff, n) != n) {Β Β printf("ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ²ΠΎΠ΄Π°\n");Β Β exit(1);Β }Β /* ΠΠ°ΠΊΡΠΎΠ΅ΠΌ FIFO, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ FIFO - Π΄Π΅Π»ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° */Β close(readfd);Β exit(0);}#include <sys/types.h>#include <sys/stat.h>/* Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΈ FIFO */#define FIFO "fifo.1"main() {Β int writefd, n;Β /* ΠΠΎΠ»ΡΡΠΈΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ FIFO */Β if ((writefd = open(FIFO, O_WRONLY)) < 0) {Β printf("ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ FIFO\n");Β exit(1);Β }Β /* ΠΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ FIFO */Β if (write(writefd, "ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉ, ΠΠΈΡ!\n", 18) != 18) {Β printf("ΠΡΠΈΠ±ΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ\n");Β Β exit(1);Β }Β /* ΠΠ°ΠΊΡΠΎΠ΅ΠΌ FIFO */Β close(writefd);Β /* Π£Π΄Π°Π»ΠΈΠΌ FIFO */Β if (unlink(FIFO) < 0) {Β printf("ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ FIFO\n");Β exit(1);Β }Β exit(0);}ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈ ΠΈΠΌΠ΅Π½Π° Π² IPC
ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΈΠΌΠ΅Π½ Ρ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π΄Π΅Π»Π°Π΅Ρ ΠΈΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ Π΄Π»Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΡΠΎΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΡΡΡΡΠ°Π½Π΅Π½ Ρ FIFO, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠ΅Π½Π°. ΠΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ, ΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌ. ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½ (name space). ΠΠΌΠ΅Π½Π° ΡΠ²Π»ΡΡΡΡΡ Π²Π°ΠΆΠ½ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΡΠΎΠΌΠ΅ ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ. Π’Π°ΠΊ, ΠΈΠΌΠ΅Π½Π΅ΠΌ FIFO ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ»ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ FIFO Π΄Π²Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΠ»Ρ ΡΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² IPC, ΠΊΠ°ΠΊ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΠ΅ΠΌΠ°ΡΠΎΡΡ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡΡ, ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°. ΠΠΌΡ Π΄Π»Ρ ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ»ΡΡΠΎΠΌ (key) ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ftok(3C) ΠΈΠ· Π΄Π²ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² β ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°:
#include <sys/types.h>#include <sys/ipc.h>key_t ftok(char* filename, char proj);Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅
filenameΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ IPC Π½Π΅ΡΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ, ΠΎΡΠΊΡΡΡΡΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.
ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ IPC ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ (ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΠ‘ (ΡΠ΄ΡΠΎΠΌ) Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ. Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΈΠΏΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΠ΅ΠΌΠ°ΡΠΎΡΡ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡΡ), Ρ.Π΅. ΠΊΠ°ΠΊΠ°Ρ-Π»ΠΈΠ±ΠΎ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΡΡΠΎ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ (Ρ ΠΎΡΡ Π»ΡΠ±ΡΠ΅ Π΄Π²Π΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ).
Π’Π°Π±Π»ΠΈΡΠ° 3.5. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² IPC
| ΠΠ±ΡΠ΅ΠΊΡ IPC | ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ | ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ |
|---|---|---|
| ΠΠ°Π½Π°Π» | β | Π€Π°ΠΉΠ»ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ |
| FIFO | ΠΠΌΡ ΡΠ°ΠΉΠ»Π° | Π€Π°ΠΉΠ»ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ |
| ΠΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ | ΠΠ»ΡΡ | ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ |
| ΠΠ±ΡΠ΅ΠΊΡ IPC | ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ | ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ |
| Π‘Π΅ΠΌΠ°ΡΠΎΡ | ΠΠ»ΡΡ | ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ |
| Π Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡΡ | ΠΠ»ΡΡ | ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ |
Π Π°Π±ΠΎΡΠ° Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ IPC System V Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΡΡ ΠΎΠ΄Π½Π°. ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ get: msgget(2) Π΄Π»Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, semget(2) Π΄Π»Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΈ shmget(2) Π΄Π»Ρ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠ΅ ΡΡΠΈ Π²ΡΠ·ΠΎΠ²Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π° ΠΈ -1 Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠ΄Π°ΡΠΈ. ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ get ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ (ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΏΠ°ΠΌΡΡΡ. ΠΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ get Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΊΠ»ΡΡ
keyipcflagipcflagPERMIPC_CREATIPC_EXCL