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

//pxshm/shmread.c

1  #include "unpipc.h"


2  int

3  main(int argc, char **argv)

4  {

5   int i, fd;

6   struct stat stat;

7   unsigned char c, *ptr;

8   if (argc != 2)

9    err_quit("usage: shmread ");

10  /* вызываем open, узнаем размер, отображаем в память*/

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

12  Fstat(fd, &stat);

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

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   if ((c = *ptr++) != (i % 256))

19    err_ret("ptr[%d] = %d", i, c);

20  exit(0);

21 }

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

16-19 Проверяются значения, помещенные в разделяемую память вызовом shmwrite.


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