Листинг 13.6. Программа, создающая и инициализирующая объект разделяемой памяти и семафор
//pxshm/server1.c
1 #include "unpipc.h"
2 struct shmstruct { /* структура, помещаемая в разделяемую память */
3 int count;
4 };
5 sem_t *mutex; /* указатель на именованный семафор */
6 int
7 main(int argc, char **argv)
8 {
9 int fd;
10 struct shmstruct *ptr;
11 if (argc != 3)
12 err_quit("usage: server1
13 shm_unlink(Px_ipc_name(argv[1])); /* ошибки игнорируются */
14 /* создание shm. установка размера, отображение, закрытие дескриптора */
15 fd = Shm_open(Px_ipc_name(argv[1]), O_RDWR | O_CREAT | O_EXCL, FILE_MODE);
16 Ftruncate(fd, sizeof(struct shmstruct));
17 ptr = Mmap(NULL, sizeof(struct shmstruct), PROT_READ | PROT_WRITE,
18 MAP_SHARED, fd, 0);
19 Close(fd);
20 sem_unlink(Px_ipc_name(argv[2])); /* игнорируем ошибку */
21 mutex = Sem_open(Px_ipc_name(argv[2]), O_CREAT | O_EXCL, FILE_MODE, 1);
22 Sem_close(mutex);
23 exit(0);
24 }