Листинг 13.7. Программа, увеличивающая значение счетчика в разделяемой памяти
//pxshm/client1.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, i, nloop;
10 pid_t pid;
11 struct shmstruct *ptr;
12 if (argc != 4)
13 err_quit("usage: client1
14 nloop = atoi(argv[3]);
15 fd = Shm_open(Px_ipc_name(argv[1]), O_RDWR, FILE_MODE);
16 ptr = Mmap(NULL, sizeof(struct shmstruct), PROT_READ | PROT_WRITE,
17 MAP_SHARED, fd, 0);
18 Close(fd);
19 mutex = Sem_open(Px_ipc_name(argv[2]), 0);
20 pid = getpid();
21 for (i = 0; i < nloop; i++) {
22 Sem_wait(mutex);
23 printf("pid %ld: %d\n", (long) pid, ptr->count++);
24 Sem_post(mutex);
25 }
26 exit(0);
27 }