Листинг Г.8. Отображение с точным указанием размера файла
//pxshra/test1.c
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 int fd, i;
6 char *ptr;
7 size_t shmsize, mmapsize, pagesize;
8 if (argc != 4)
9 err_quit("usage: test1
10 shmsize = atoi(argv[2]);
11 mmapsize = atoi(argv[3]);
12 /* открываем shm: создание или урезание; установка размера */
13 fd = Shm_open(Px_ipc_name(argv[1]), O_RDWR | O_CREAT | O_TRUNC,
14 FILE_MODE);
15 Ftruncate(fd, shmsize); /* $$.bp$S */
16 ptr = Mmap(NULL, mmapsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
17 Close(fd);
18 pagesize = Sysconf(_SC_PAGESIZE);
19 printf("PAGESIZE = %ld\n", (long) pagesize);
20 for (i = 0; i < max(shmsize, mmapsize); i += pagesize) {
21 printf("ptr[%d] = %d\n", i, ptr[i]);
22 ptr[i] = 1;
23 printf("ptr[%d] = %d\n", i + pagesize – 1, ptr[i + pagesize – 1]);
24 ptr[i + pagesize – 1] = 1;
25 }
26 printf("ptr[%d] =%d\n", i, ptr[i]);
27 exit(0);
28 }