Листинг 14.4. Проверка значений в сегменте разделяемой памяти
//svshm/shmread.c
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 int i, id;
6 struct shmid_ds buff;
7 unsigned char c, *ptr;
8 if (argc != 2)
9 err_quit("usage: shmread
10 id = Shmget(Ftok(argv[1], 0), 0, SVSHM_MODE);
11 ptr = Shmat(id, NULL, 0);
12 Shmctl(id, IPC_STAT, &buff);
13 /* проверка значений ptr[0] = 0, ptr[1] = 1 и т. д. */
14 for (i = 0; i < buff.shm_segsz; i++)
15 if ((c = *ptr++) != (i % 256))
16 err_ret("ptr[%d] = %d", i.e);
17 exit(0);
18 }
10-12 Открываем и подключаем сегмент разделяемой памяти. Его размер может быть получен вызовом shmctl с командой IPC_STAT. 13-16 Проверяется последовательность, записанная программой shmwrite.