gpt4 book ai didi

c - 从现有文件描述符分配一个结构体 - c

转载 作者:行者123 更新时间:2023-11-30 14:59:48 26 4
gpt4 key购买 nike

我正在创建一个服务器和一个客户端,它们都访问共享内存并更改共享内存中的数据。

我使用 shm_open 打开共享内存,使用 ftruncate 更改共享内存的大小,使用 mmap 映射共享内存struct 类型的共享内存对象。

我想创建一个通过文件描述符访问共享内存并返回指向结构的指针的函数。

例如:

XStruct * accessMem(int fd){ /*what to do here? */};

我不知道如何解决这个问题,或者使用什么函数来访问共享内存。任何帮助都会很棒。

这是家庭作业,因此解释会非常有帮助。

谢谢!

最佳答案

您必须使用(或实现内存分配器来对从 mmap 收到的 block 进行操作)。

一个简单的实现可能是使用凹凸分配器。

存储从 mmap 接收到的指针值。每次需要为结构体分配内存时,将指针增加 sizeof (struct) 并返回原始指针。

void *allocator_top; // Define a global pointer to top of the "heap" area.
.
.
.
allocator_top = mmap(...); // Do this wherever you perform the mmap
.
.

Xstruct * accessMem(){
void *temp = allocator_top;
// Need to check here if you have exceeded the amount of space mapped. If yes, you need to expand and add more pages.
allocator_top += sizeof(Xstruct);
return temp;
}

编辑:如果您有多个共享区域并希望分别从它们分配,您可以将 void **allocator_top 作为 accessMem() 的参数,并传递您要从中分配的区域的顶部。

关于c - 从现有文件描述符分配一个结构体 - c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42528570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com