Ошибка шины при записи в общую память
Я пытаюсь использовать общую память POSIX в системе Linux. Но когда я пытаюсь скопировать данные на него, я получаю ошибку шины. Вот код:
#include <fcntl.h>
#include <sys/stat.h>
#include <pthread.h>
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
void main ()
{
char *s = "a";
//<!--make file descripter-->
int fd = shm_open (s, O_CREAT | O_EXCL | O_RDWR, S_IRUSR | S_IWUSR);
if (fd == -1)
{
perror ("shm open:");
printf ("error\n");
shm_unlink (s);
exit (1);
}
//<!--memory allocation-->
char *str = (char *)mmap (NULL, 10, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (str == MAP_FAILED)
{
perror ("mmap");
exit (1);
}
*(str + 1) = 'a';
//<!--memory deallocation-->
munmap (str, 10);
//<!--unlink shared memory-->
shm_unlink (s);
}
Что вызывает его сбой?
1 ответ
Решение
Вы обращаетесь к памяти за пределами конца файла, который вы отобразили. Вам нужно увеличить размер файла, чтобы получить место. После shm_open()
, добавлять:
int size = 10; // bytes
int rc = ftruncate(fd, size);
if(rc==-1){ ...; exit(1); }