Распечатка 7.7 Операции с общей памятью POSIX |
Предыдущая Содержание Следующая |
Распечатка 7.7.
/* shm.c */
#include <sys/types.h> #include <sys/mman.h> #include <fcntl.h>
/* Размер сегмента нашей общей памяти */ #define SHM_SIZE 1024
int main(){ int shm_fd; void *vaddr;
/* Получаем дескриптор общей памяти */ if ((shm_fd = shm_open("my_shm", O_CREAT | O_RDWR, 0666)) == -1){ perror("cannot open"); return -1; }
/* Устанавливаем размер общей памяти равным SHM_SIZE */ if (ftruncate(shm_fd, SHM_SIZE) != 0){ perror("cannot set size"); return -1; }
/* * Подключаем общую память в адресное пространство. Флаг * MAP_SHARED говорит, что это подключение общей памяти. */ if ((vaddr = mmap(0, SHM_SIZE, PROT_WRITE, MAP_SHARED, shm_fd, 0)) == MAP_FAILED){ perror("cannot mmap"); return -1; }
/* Блокируем общую память. Не забываем про этот шаг */ if (mlock(vaddr, SHM_SIZE) != 0){ perror("cannot mlock"); return -1; }
/* * Общая память готова к использованию */
/* * В конце отделяем сегмент общей памяти от адресного * пространства. Это также приведёт к разблокировке этого * сегмента. */ munmap(vaddr, SHM_SIZE); close(shm_fd); /* Удаляем сегмент общей памяти */ shm_unlink("my_shm"); return 0; }
|
Предыдущая Содержание Следующая |