на главную | войти | регистрация | 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.3. Заполнение разделяемой памяти

//pxshm/shmwrite.с

1  #include "unpipc.h"


2  int

3  main(int argc, char **argv)

4  {

5   int i, fd;

6   struct stat stat;

7   unsigned char *ptr;

8   if (argc != 2)

9    err_quit("usage: shmwrite ");

10  /* open, определяем размер, отображаем в память */

11  fd = Shm_open(argv[1], O_RDWR, FILE_MODE);

12  Fstat(fd, &stat);

13  ptr = Mmap(NULL, stat.st_size, PROT_READ | PROT_WRITE,

14   MAP_SHARED, fd, 0);

15  Close(fd);

16  /* присваиваем: ptr[0] = 0, ptr[1] = 1 и т. д. */

17  for (i = 0; i < stat.st_size; i++)

18   *ptr++ = i % 256;

19  exit(0);

20 }

10-15 Объект разделяемой памяти открывается вызовом shm_open. Его размер мы узнаем с помощью fstat. Затем файл отображается в память вызовом mmap, после чего его дескриптор может быть закрыт.

16-18 Последовательность записывается в разделяемую память.


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