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值之后内存空间开始位置的指针。现在,如果我这样做,我会得到内存故障。我可以附加它并使用以下命令获取起始内存空间:
void* mem = shmat(shmid, NULL, 0);关于如何让它处于mem->value1并访问原始数据字节的数据缓冲区的状态,有什么建议吗?
发布于 2021-11-06 02:17:36
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 validhttps://stackoverflow.com/questions/69860930
复制相似问题