Записать структуру в общую память POSIX в c - PullRequest
0 голосов
/ 30 октября 2019

Я хочу инициализировать разделяемую память и записать в нее структуру. Эта структура будет позже разделена между процессами. Начиная с очень простого кода:

typedef struct shm_mem {
        char data[2100];
}shm_mem;

int main() {
        // Open and map the shared memory
        int fd = shm_open("/shm_example", O_CREAT | O_RDWR | O_EXCL, 0600);
        ftruncate(fd, 4200);
        shm_mem *ptr = (shm_mem *)mmap(NULL, 4200, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
        printf("Obtained shared memory at address %p\n", ptr);
        // Need an actual struct and THEN copy it into the memory I think
        shm_mem actual;
        strcpy(actual.data, "Sample data blaj balj");
        printf("In actual, data = %s\n", actual.data);
        memcpy(ptr, &actual, sizeof(actual));
return 0;
}

Но это продолжает получать SIGSEGV:

Invalid write of size 8
==4062==    at 0x1088AF: main (test_proxy.c:32)
==4062==  Address 0xffffffffffffffff is not stack'd, malloc'd or (recently) free'd
==4062== 
==4062== 
==4062== Process terminating with default action of signal 11 (SIGSEGV)
==4062==  Access not within mapped region at address 0xFFFFFFFFFFFFFFFF
==4062==    at 0x1088AF: main (test_proxy.c:32)

, где строка 32 - строка memcpy.

Не могу понять почему. Пожалуйста, помогите мне.

...