具有共享内存和初始化的结构

时间:2012-07-29 14:38:18

标签: c linux struct shared-memory

在发布my previous后,我想提前一步:

我想分配一个共享内存区域,并为已分配/共享放置初始值 数据:

static struct PipeShm  myPipeSt = {.init = 0 , .flag = FALSE , .mutex = NULL , .ptr1 = NULL , .ptr2 = NULL ,
        .status1 = -10 , .status2 = -10 , .semaphoreFlag = FALSE };

int shmid  = shmget(IPC_PRIVATE, sizeof(int), 0600);
static struct PipeShm  * myPipe = shmat(shmid, NULL, 0); // &myPipeSt;

myPipe = & myPipeSt; // that doesn't compile 

建议?

非常感谢!

2 个答案:

答案 0 :(得分:4)

首先,您只需要一个整数大小的共享内存,而不是整个结构。即使它被四舍五入到最接近的页面大小,您也应该始终使用您要使用的结构的适当大小。

其次,要从一个结构复制到另一个结构,您只需指定。要复制到指向结构的指针,您必须使用解除引用运算符*,如:

*myPipe = myPipeSt;

答案 1 :(得分:2)

这会编译:

*myPipe = myPipeSt;

您可以使用简单赋值运算符和myPipe复制结构对象,因为它是您需要取消引用它以访问结构对象的指针。