繁体   English   中英

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

[英]Allocate a struct from an existing file descriptor - c

我正在创建同时访问共享内存和更改共享内存中数据的服务器和客户端。

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

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

例如:

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

我不确定如何执行此操作,或者不确定要使用哪些函数来访问共享内存。 任何帮助都会很棒。

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

谢谢!

您将不得不使用(或实现一个内存分配器,以对从mmap接收到的块进行操作)。

一种简单的实现方式是使用凹凸分配器。

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

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()的参数,并传递要从中分配区域的顶部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM