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

标签 c multiprocessing shared-memory

我正在查看一些示例代码并试图弄清楚这一点,但我陷入了困境。我只是想创建一个 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/

相关文章:

c - 越界访问缓冲区 ''

Ruby VM 并发性和并行性

Python 多处理池作为装饰器

c - 在 c 中使用 Shmget() 和结构体

php - APC Cache 仅使用 32M 内存

c - IPC_CREAT 有什么用? 0666 C 中 shmget() 函数中的标志

c - 不断收到堆栈粉碎错误

c - 具有 3 个字符的字符串显示意外的输出,而具有 6 个字符的字符串显示正确的输出

c - 旧的 DOS C 编译器是否将 double 实现为 32 位?

python - 在 python 进程中创建和重用对象