简体   繁体   中英

Assigning int *[10] from type void* when using shmat

I'm looking at some example code and trying to figure this out but am stuck. I'm just trying to create a buffer of 10 ints and have my shared memory pointers point to that. Can someone help me understand what this code is actually doing and where I went wrong?

int shmem_id;       /* shared memory identifier */
int *shmem_ptr[BUFSIZE];     /* pointer to shared segment */
key_t key = 4455;         /* a key... */
int size = 2048;        /* 2k memory */
int flag = 1023;        /* permissions */
char keystr[10];
sprintf (keystr, "%d", key);
shmem_id = shmget (key, size, flag);    /* create a shared memory segment */
shmem_ptr = shmat (shmem_id, (void *) NULL, 1023);

In reality I want it to a buffer of 10 struct items.

typedef struct widget{
   char color[10];
};

Your declaration:

int *shmem_ptr[BUFSIZE];

declares shmem_ptr to be an array of pointers to integers. You just want a pointer to integers, so it should be:

int *shmem_ptr;

If the memory points to widget structures, you can do:

typedef struct widget {
    char color[10];
} widget;

widget *shmem_ptr;

You don't need to declare the length when declaring a pointer. The length is specified when the shared memory block is created, not in the program that attaches to it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM