无法取消映射共享内存

时间:2019-10-21 14:36:47

标签: c ubuntu posix shared-memory mmap

我已经成功地将内存对象映射为Integer大小,例如:

shared_var = (int *) mmap(NULL, sizeof(int), PROT_WRITE  | PROT_READ, MAP_SHARED, shmid, 0);

但是当我尝试取消映射时,当我说length为0时,我要么得到了一个无效参数的错误,就像这样:

if(munmap(shared_var, 0) == -1){
    perror(NULL);
    printf("Error unmapping memory: %d\n", errno);
    exit(1);
}

打印出来的

无效参数

取消映射内存错误:22

或者当我说长度为sizeof(int)时出现分段错误,例如:

if(munmap(shared_var, sizeof(int)) == -1){
    perror(NULL);
    printf("Error unmapping memory: %d\n", errno);
    exit(1);
}

为什么会发生这种情况?

编辑:shmid来自创建共享内存的实例:

if( (shmid = shm_open("/OS",   O_RDWR | O_CREAT ,0700)) == -1){
        printf("Error creating memory\n");
        exit(1);
    }

    if (ftruncate(shmid, sizeof(int)) == -1){
        printf("Error defining size\n");
        exit(1);
    }

0 个答案:

没有答案