The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Распечатка 7.7 Операции с общей памятью POSIX

Распечатка 7.7 Операции с общей памятью POSIX

Предыдущая  Содержание  Следующая V*D*V

Распечатка 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;

}

 

Предыдущая  Содержание  Следующая