При очередном прохождении цикла msgget создает очередь сообщений, a msgctl с командой IPC_RMID в качестве аргумента удаляет ее. Константа SVMSG_MODE определяется в нашем заголовочном файле unpipc.h (листинг В.1) и задает разрешения по умолчанию для очереди сообщений System V. Вывод программы будет иметь следующий вид: При повторном запуске программы мы увидим наглядную иллюстрацию того, что последовательный номер канала — это переменная, хранящаяся в ядре и продолжающая существовать и после завершения процесса.Листинг 3.2. Вывод идентификатора очереди сообщений десять раз подряд
//svmsg/slot.c
1 #include
2 int
3 main(int argc, char **argv)
4 {
5 int i, msqid;
6 for (i=0;i<10;i++) {
7 msqid=Msgget(IPC_PRIVATE, SVMSG_MODE|IPC_CREAT);
8 printf("msqid = %d\n", msqid);
9 Msgctl(msqid, IPC_RMID, NULL);
10 }
11 exit(0);
12 }
solaris %slot
msqid = 0
msqid = 50
msqid = 100
msqid = 150
msqid = 200
msqid = 250
msqid = 300
msqid = 350
msqid = 400
msqid = 450
solaris % slot
msqid = 500
msqid = 550
msqid = 600
msqid = 650
msqid = 700
msqid = 750
msqid = 800
msqid = 850
msqid = 900
msqid = 950