14 if (optind != argc β 1)
15 err_quit("usage: msgcreate [ βe ] <pathname>");
16 mqid = Msgget(Ftok(argv[optind], 0), oflag);
17 exit(0);
18 }
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° msgsnd
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° msgsnd ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 6.3. ΠΠ½Π° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠ΄Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ ΠΈ ΡΠΈΠΏΠ°.
ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ msgbuf ΠΎΠ±ΡΠ΅Π³ΠΎ Π²ΠΈΠ΄Π°, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ΄ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ (Π±ΡΡΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ) ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, Π²ΡΠ·Π²Π°Π² calloc. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π±ΡΡΠ΅Ρ Π½ΡΠ»Π΅ΠΌ.
ΠΠΈΡΡΠΈΠ½Π³ 6.3. ΠΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ System V//svmsg/msgsnd.c
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 int mqid;
6 size_t len;
7 long type;
8 struct msgbuf *ptr;
9 if (argc != 4)
10 err_quit("usage: msgsnd <pathname> <#bytes> <type>");
11 len = atoi(argv[2]);
12 type = atoi(argv[3]);
13 mqid = Msgget(Ftok(argv[1], 0), MSG_W);
14 ptr = Calloc(sizeof(long) + len, sizeof(char));
15 ptr->mtype = type;
16 Msgsnd(mqid, ptr, len, 0);
17 exit(0);
18 }
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° msgrcv
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 6.4 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ msgrcv, ΡΡΠΈΡΡΠ²Π°ΡΡΠ΅ΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. Π ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ βn, ΠΎΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ βt ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΈΠΏΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ msgrcv.
2 ΠΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (ΠΎΠ± ΡΡΠΎΠΌ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 6.10), ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
ΠΠΈΡΡΠΈΠ½Π³ 6.4. Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ System V//svmsg/msgrcv.c
1 #include "unpipc.h"
2 #define MAXMSG (8192 + sizeof(long))
3 int
4 main(int argc, char **argv)
5 {
6 int c, flag, mqid;
7 long type;
8 ssize_t n;
9 struct msgbuf *buff;
10 type = flag = 0;
11 while ((c = Getopt(argc, argv, "nt:")) != β1) {
12 switch (c) {
13 case 'n':
14 flag |= IPC_NOWAIT;
15 break;
16 case 't':
17 type = atol(optarg);
18 break;
19 }
20 }
21 if (optind != argc β 1)
22 err_quit("usage: msgrcv [ βn ] [ βt type ] <pathname>");
23 mqid = Msgget(Ftok(argv[optind], 0), MSG_R);
24 buff = Malloc(MAXMSG);
25 n = Msgrcv(mqid, buff, MAXMSG, type, flag);
26 printf("read %d bytes, type = %ld\n", n, buff->mtype);
27 exit(0);
28 }
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° msgrmid
ΠΠ»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ msgctl Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ IPC_RMID, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 6.5.
ΠΠΈΡΡΠΈΠ½Π³ 6.5. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ System V//svmsg/msgrmid.c
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 int mqid;
6 if (argc != 2)
7 err_quit("usage: msgrmid <pathname>");
8 mqid = Msgget(Ftok(argv[1], 0), 0);
9 Msgctl(mqid, IPC_RMID, NULL);
10 exit(0);
11 }
ΠΡΠΈΠΌΠ΅ΡΡ
Π’Π΅ΠΏΠ΅ΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ΅ΡΡΡΡΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠΌ Π² Π½Π΅Π΅ ΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ:
solaris % msgcreate /tmp/no/such/file
ftok error for pathname "tmp/no/such/file" and id 0: No such file or directory
solaris % touch /trap/test1
solaris % msgcreate /tmp/test1
solaris % msgsnd /tmp/test1 1 100
solaris % msgsnd /tmp/test1 2 200
solaris % msgsnd /tmp/test1 3 300
solaris % ipcs βqo
IPC status from <running system> as of Sat Jan 10 11:25:45 1998
T ID KEY MODE OWNER GROUP CBYTES QNUM
Message Queues:
q 100 0Ρ 0000113e βrw-r--r-- rstevens other1 6 3
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠΌΡ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΉΠ», ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ftok, ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ°ΠΉΠ» /tmp/test1 ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΈΠΌΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ ΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΄Π»ΠΈΠ½ΠΎΠΉ 1, 2 ΠΈ 3 Π±Π°ΠΉΡΠ° ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΈΠΏΠ° 100, 200 ΠΈ 300 (Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΡΠΈΡ. 6.1). ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ipcs ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ 3 ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ 6 Π±Π°ΠΉΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° type ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ msgrcv Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅:
solaris % msgrcv βt 200 /tmp/test1
read 2 bytes, type = 200
solaris % msgrcv βt -300 /tmp/test1
read 1 bytes, type = 100
solaris % msgrcv /tmp/test1
read 3 bytes, type = 300
solaris % msgrcv βn /tmp/test1
msgrcv error: No message of desired type
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠΈΠΏΠΎΠΌ 200, Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ β ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ°, Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡΠΈΠΌ 300, Π° Π² ΡΡΠ΅ΡΡΠ΅ΠΌ β ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π·Π°ΠΏΡΡΠΊ msgrcv ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ»Π°Π³Π° IPC_NOWAIT.
Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°, Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ ΡΠ°ΠΊΠΈΠΌ ΡΠΈΠΏΠΎΠΌ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡΡ?
solaris % ipcs βqo
IPC status from <running system> as of Sat Jan 10 11:37:01 1998
T ID KEY MODE OWNER GROUP CBYTES QNUM
Message Queues:
q 100 0x0000113e βrw-r--r-- rstevens other1 0 0
solaris % msgsnd /tmp/test1 1 100
solaris % msgrcv βt 999 /temp/test1
^? Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
solaris % msgrcv βn βt999/tmp/test1
msgrcv error: No message of desired type
solaris % grep desired /usr/include/sys/errno.h
#define ENOMSG 35 /* No message of desired type */
solaris % msgrmid /tmp/test1
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ipcs, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΡΡΠ°, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π² Π½Π΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½ΠΎΠΉ 1 Π±Π°ΠΉΡ Ρ ΡΠΈΠΏΠΎΠΌ 100. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠΈΠΏΠΎΠΌ 999, ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ (ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ msgrcv), ΠΎΠΆΠΈΠ΄Π°Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ. ΠΡ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΠΈ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΡΠ»Π°Π³ΠΎΠΌ βn, ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°ΡΡΠΈΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ° Ρ ΠΊΠΎΠ΄ΠΎΠΌ ENOMSG. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ msgrmid. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
solaris % ipcrm βq 100
Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΠΈΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅
solaris % ipcrm βQ 0x113e
Π³Π΄Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ»ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° msgrcvid
ΠΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ΅ΠΏΠ΅ΡΡ, ΡΡΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ System V Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ msgget: Π²ΡΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ, β ΡΡΠΎ Π·Π½Π°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ipcs, ΠΈ ΡΡΠΈΡΠ°ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° Π΄Π»Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 6.6 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ msgrcv ΠΈΠ· Π»ΠΈΡΡΠΈΠ½Π³Π° 6.4.
ΠΠ΄Π΅ΡΡ ΠΌΡ ΡΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ msgget. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
ΠΠΈΡΡΠΈΠ½Π³ 6.6. Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ System V Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ//svmsg/msgrcvid.c
1 #include "unpipc.h"
2 #define MAXMSG (8192 + sizeof(long))
3 int
4 main(int argc, char **argv)
5 {
6 int mqid;
7 ssize_t n;
8 struct msgbuf *buff;
9 if (argc != 2)
10 err_quit("usage: msgrcvid <mqid>");
11 mqid = atoi(argv[1]);
12 buff = Maloc(MAXMSG);
13 n = Msgrcv(mqid, buff, MAXMSG, 0, 0);
14 printf("read %d bytes, type = %ld\n", n, buff->mtype);
15 exit(0);
16 }
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
solaris % touch /tmp/testid
solaris % msgcreate /tmp/testid
solaris % msgsnd /tmp/testid4 400
solaris % ipcs βqo
IPC status from <running system> as of Wed Mar 25 09:48:28 1998
T ID KEY MODE OWNER GROUP CBYTES QNUM
Message Queues:
q 150 0x0000118a βrw-r--r-- rstevens other1 4 1
solaris % msgrcvid 150
read 4 bytes, type = 400
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ (150) ΠΌΡ ΡΠ·Π½Π°Π»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ipcs, Π΅Π³ΠΎ ΠΌΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ msgrcvid Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
ΠΡΠΎΡ ΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² System V (ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 11.1) ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ System V (ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 14.1).
6.7. ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ
ΠΠ΅ΡΠ΅ΠΏΠΈΡΠ΅ΠΌ Π½Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΈΠΏΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° 4.2 Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠ΄Π½Π° ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΡ, Π° Π΄ΡΡΠ³Π°Ρ β Π² ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΡΠΎΡΠΎΠ½Ρ.
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» svmsg.h ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 6.7. ΠΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π½Π°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠ»ΡΡΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
ΠΠΈΡΡΠΈΠ½Π³ 6.7. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» svmsg.h Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ//svmsgcliserv/svmsg.h