繁体   English   中英

使用shmat时,从void *类型分配int * [10]

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

我正在看一些示例代码,试图弄清楚这个问题,但是被卡住了。 我只是试图创建一个10个整数的缓冲区,并让我的共享内存指针指向该缓冲区。 有人可以帮助我了解这段代码的实际作用以及我出了什么问题吗?

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);

实际上,我希望它包含10个结构项的缓冲区。

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

您的声明:

int *shmem_ptr[BUFSIZE];

声明shmem_ptr是一个整数指针数组。 您只需要一个指向整数的指针,因此它应该是:

int *shmem_ptr;

如果内存指向widget结构,则可以执行以下操作:

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

widget *shmem_ptr;

声明指针时不需要声明长度。 该长度是在创建共享内存块时指定的,而不是在附加程序中指定的长度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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