Wie Zugriff auf Variablen im shared memory

Ich versuche zu erstellen, ein shared-memory-segment mit drei Integer-Werten und ein array. Das segment wird erstellt und ein Zeiger angebracht ist, aber wenn ich versuche, Zugriff auf die Werte der Variablen (egal ob ändern, drucken, etc.) Ich bekomme einen segmentation fault.

Hier ist der code, den ich versuchte:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>

#define SIZE 10

    int* shm_front;
    int* shm_end;
    int* shm_count;
    int* shm_array;
    int shm_size = 3*sizeof(int) + sizeof(int[SIZE]);

int main(int argc, char* argsv[])
{
    int shmid;

    //create shared memory segment
    if((shmid = shmget(IPC_PRIVATE, shm_size, 0644)) == -1)
    {
        printf("error in shmget");
        exit(1);
    }

    //obtain the pointer to the segment
    if((shm_front  = (int*)shmat(shmid, (void *)0, 0)) == (void *)-1)
    {
        printf("error in shmat");
        exit(1);
    }
    //move down the segment to set the other pointers
    shm_end = shm_front + 1;
    shm_count = shm_front + 2;
    shm_array = shm_front + 3;

//tests on shm
*shm_end = 10;                //gives segmentation fault
printf("\n%d", *shm_end);   //gives segmentation fault

           //clean-up
    //get rid of shared memory
    shmdt(shm_front);
    shmctl(shmid, IPC_RMID, NULL);

    printf("\n\n");
    return 0;
}

Ich habe versucht, den Zugriff auf den gemeinsam genutzten Speicher durch dereferenzieren der Zeiger auf die struct, bekam aber einen segmentation fault, jedes mal.

Danke an alle, keine Segmentierung Fehler jetzt.

  • Versucht post-Vorschlag hier, aber die Formatierung sah schrecklich aus..siehe Antwort unten.
InformationsquelleAutor user1723361 | 2012-10-05
Schreibe einen Kommentar