Книга: UNIX: взаимодействие процессов

Программа shmcreate

Программа shmcreate

Программа shmcreate, текст которой приведен в листинге 13.1,[1] создает объект разделяемой памяти с указанным именем и длиной.

Листинг 13.1. Создание объекта разделяемой памяти Posix указанного размера

//pxshm/shmcreate.c
1  #include "unpipc.h"
2  int
3  main(int argc, char **argv)
4  {
5   int c, fd, flags;
6   char *ptr;
7   off_t length;
8   flags = O_RDWR | O_CREAT;
9   while ((c = Getopt(argc, argv, "e")) != –1) {
10   switch (c) {
11   case 'e':
12    flags |= O_EXCL;
13    break;
14   }
15  }
16  if (optind != argc – 2)
17   err_quit("usage: shmcreate [ –e ] <name> <length>");
18  length = atoi(argv[optind + 1]);
19  fd = Shm_open(argv[optind], flags, FILE_MODE);
20  Ftruncate(fd, length);
21  ptr = Mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
22  exit(0);
23 }

19-22 Вызов shm_open создает объект разделяемой памяти. Если указан параметр –е, будет возвращена ошибка в том случае, если такой объект уже существует. Вызов ftruncate устанавливает длину (размер объекта), a mmap отображает его содержимое в адресное пространство процесса. Затем программа завершает работу. Поскольку разделяемая память Posix обладает живучестью ядра, объект разделяемой памяти при этом не исчезает.

Оглавление книги


Генерация: 1.407. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз