首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中的共享内存(sysV)

C中的共享内存(sysV)
EN

Stack Overflow用户
提问于 2021-11-06 02:07:11
回答 1查看 48关注 0票数 1
代码语言:javascript
复制
struct shared_memory_t {
    int value1; 
    int value2;
    char* buffer; 
};

shmid = shmget(key, sizeof(shared_memory_t) + segsize, 0666|IPC_CREAT);
shared_memory_t* mem = (shared_memory_t*) shmat(*shmid, NULL, 0);

因此,我尝试将共享内存映射到自定义结构。现在,直到用户启动程序并输入一个值,我才知道segsize有多大。我希望buffer是指向int值之后内存空间开始位置的指针。现在,如果我这样做,我会得到内存故障。我可以附加它并使用以下命令获取起始内存空间:

代码语言:javascript
复制
void* mem = shmat(shmid, NULL, 0);

关于如何让它处于mem->value1并访问原始数据字节的数据缓冲区的状态,有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2021-11-06 02:17:36

使用flexible array member

代码语言:javascript
复制
struct shared_memory_t {
    int value1; 
    int value2;
    char buffer[]; // flexible array member
};

shmid = shmget(key, sizeof(shared_memory_t) + segsize, 0666|IPC_CREAT);
shared_memory_t* mem = (shared_memory_t*) shmat(shmid, NULL, 0);
memset(mem.buffer, 42, segsize); // all valid
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69860930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档