1

注意:实际问题在于使用 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这是为什么呢?!!请注意,我运行程序的前几次,错误没有出现!

我该如何解决这个问题?!

4

2 回答 2

0
shmfd = shm_open("/shm2_rev_to_upp", O_RDWR | O_CREAT | O_EXCL, 0666);

modify:  shmfd = shm_open("/shm2_rev_to_upp", O_RDWR | O_CREAT, 0666);
于 2021-03-24T11:48:10.037 回答
0

手册页解释了各种错误代码:

EEXIST: O_CREAT 和 O_EXCL 都被指定给 shm_open() 并且 name 指定的共享内存对象已经存在。

于 2018-11-01T03:09:19.183 回答