我已经成功地将内存对象映射为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);
}