Я успешно сопоставил объект памяти с размером целого числа следующим образом:
shared_var = (int *) mmap(NULL, sizeof(int), PROT_WRITE | PROT_READ, MAP_SHARED, shmid, 0);
Но когда я пытаюсь удалить его, я либо получаю ошибку для неверного аргумента, когда говорюдлина равна 0, как таковая:
if(munmap(shared_var, 0) == -1){
perror(NULL);
printf("Error unmapping memory: %d\n", errno);
exit(1);
}
, которая печатает:
Недопустимый аргумент
Ошибка при отображении памяти: 22 * 1011 *
Или я получаю сегментациюошибка, когда я говорю, что длина - это 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);
}