на главную | войти | регистрация | 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.4. Простые программы

Приведем несколько примеров программ, работающих с разделяемой памятью Posix.

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

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


13.3. Функции ftruncate и fstat | UNIX: взаимодействие процессов | Программа shmcreate