在发布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
建议?
非常感谢!
答案 0 :(得分:4)
首先,您只需要一个整数大小的共享内存,而不是整个结构。即使它被四舍五入到最接近的页面大小,您也应该始终使用您要使用的结构的适当大小。
其次,要从一个结构复制到另一个结构,您只需指定。要复制到指向结构的指针,您必须使用解除引用运算符*
,如:
*myPipe = myPipeSt;
答案 1 :(得分:2)
这会编译:
*myPipe = myPipeSt;
您可以使用简单赋值运算符和myPipe
复制结构对象,因为它是您需要取消引用它以访问结构对象的指针。