我正在查看一些示例代码并试图弄清楚这一点,但我陷入了困境。我只是想创建一个 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;
声明指针时不需要声明长度。长度是在创建共享内存块时指定的,而不是在附加到它的程序中指定的。
关于c - 使用 shmat 时从 void* 类型分配 int *[10],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26310183/