на главную | войти | регистрация | 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
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


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



Листинг 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 ] ");

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 обладает поменьшей мере живучестью ядра, поэтому сегмент разделяемой памяти при этом не удаляется.


Программа shmget | UNIX: взаимодействие процессов | Программа shmrmid