Я пытаюсь использовать общую память с shm_open и mmap. Однако, когда я пытаюсь записать в эту память, я получаю ошибку шины. Пример кода минимализма приведен ниже. В чем проблема и как ее можно решить?Ошибка шины при попытке записи в общей памяти
#include <stdio.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
// compile with -lrt
char fname[64];
int fd;
int main()
{
int * sm;
sprintf(fname, "%d_%u", 4, 4);
if ((fd = shm_open(fname, O_CREAT | O_RDWR, 0777)) == -1)
{
perror(NULL);
return 0;
}
sm = (int*)mmap(0, (size_t)4096, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED,
fd, 0);
printf("Now trying to see if it works!\n");
sm[0] = 42;
printf("%d, %d!\n", sm[0], sm[1]);
return 0;
}
Выход я получаю следующее
Now trying to see if it works!
Bus error
Вам нужно проверить, возвращает ли 'mmap'' MAP_FAILED', и если да, обратитесь к 'errno', чтобы выяснить, почему. (Кроме того, вы бы не пытались написать обходной объект с нулевой длиной, не так ли? «Mmap» и запись в область «mmap» могут увеличить объект.) –
Связанный: http: // stackoverflow.com/questions/212466/what-is-a-bus-error –