Unix: общая память. shm_open () возвращает -1 - PullRequest
0 голосов
/ 01 ноября 2018

Примечание : проблема была в использовании функции fork (). Так что решение найдено.


 //create shared memoery
        int shmfd;
        void *shared_memory = (void *)0;
        shmfd = shm_open("/shm2_rev_to_upp", O_RDWR | O_CREAT | O_EXCL, 0666); //reverse to upper
        if (shmfd == -1) {
           perror("shm_open");
           exit(1);
        }

        if(ftruncate(shmfd, sizeof(struct shared_use_st)) == -1){
          perror("ftruncate");
          exit(1);
        }

        shared_memory = mmap(NULL, sizeof(struct shared_use_st), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0);

        if(shared_memory == MAP_FAILED){
          perror("mmap");
          exit(1);
        }

    //some code here

    munmap(shared_memory, sizeof(struct shared_use_st));
    shm_unlink("/shm2_rev_to_upp");
    close(shmfd);

Я получил эту ошибку во время выполнения

shm_open: File exists

Тогда shm_open() return -1 почему это? !! Обратите внимание, что первые пару раз я запускаю программу, ошибка не отображается !!

Как я могу решить эту проблему?!

1 Ответ

0 голосов
/ 01 ноября 2018

Справочная страница объясняет различные коды ошибок:

EEXIST: и O_CREAT, и O_EXCL были указаны для shm_open (), а объект общей памяти, указанный в имени, уже существует.

...