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

Программа shmget

Программа shmget

Программа shmget, текст которой приведен в листинге 14.1,[1] создает сегмент разделяемой памяти, принимая из командной строки полное имя и длину сегмента.

Листинг 14.1. Создание сегмента разделяемой памяти System V указанного размера

//svshm/shmget.c
1  #include "unpipc.h"
2  int
3  main(int argc, char **argv)
4  {
5   int c, id, oflag;
6   char *ptr;
7   size_t length;
8   oflag = SVSHM_MODE | IPC_CREAT;
9   while ((c = Getopt(argc, argv, "e")) != –1) {
10   switch (c) {
11   case 'e':
12    oflag |= IPC_EXCL;
13    break;
14   }
15  }
16  if (optind != argc – 2)
17   err_quit("usage: shmget [ –e ] <pathname> <length>");
18  length = atoi(argv[optind + 1]);
19  id = Shmget(Ftok(argv[optind], 0), length, oflag);
20  ptr = Shmat(id, NULL, 0);
21  exit(0);
22 }

19 Вызов shmget создает сегмент разделяемой памяти указанного размера. Полное имя, передаваемое в качестве аргумента командной строки, преобразуется в ключ IPC System V вызовом ftok. Если указан параметр –е, наличие существующего сегмента с тем же именем приведет к возвращению ошибки. Если мы знаем, что сегмент уже существует, в командной строке должна быть указана нулевая длина.

20 Вызов shmat подключает сегмент к адресному пространству процесса. После этого программа завершает работу. Разделяемая память System V обладает поменьшей мере живучестью ядра, поэтому сегмент разделяемой памяти при этом не удаляется.

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


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