Листинг 14.3. Заполнение сегмента разделяемой памяти последовательностью чисел
//svshm/shmwrite.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 *ptr;
8 if (argc != 2)
9 err_quit("usage: shmwrite
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 *ptr++ = i % 256;
16 exit(0);
17 }
10-12 Сегмент разделяемой памяти открывается вызовом shmget и подключается вызовом shmat. Его размер может быть получен вызовом shmctl с командой IPC_STAT.
13-15 В разделяемую память записывается последовательность значений.