на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



Листинг 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 }


13.5. Увеличение общего счетчика | UNIX: взаимодействие процессов | Создание объекта разделяемой памяти