当前位置: 技术问答>linux和unix
共享内存存取结构体
来源: 互联网 发布时间:2016-02-05
本文导语: 两个程序,第一个向共享内存里存链表结构体,第二个读取数据,但是读取总是报错。 希望大家帮助。 下面是第二个程序,在key=101的里面存了共享链表的头地址 #include #include #include typedef struct _LinkNode { void ...
两个程序,第一个向共享内存里存链表结构体,第二个读取数据,但是读取总是报错。
希望大家帮助。
下面是第二个程序,在key=101的里面存了共享链表的头地址
#include
#include
#include
typedef struct _LinkNode
{
void *buff;
struct _LinkNode *next;
}LinkNode;
main()
{
int shm_id,*shm_addr;
LinkNode *ptr;
shm_id=shmget(101,64,0777);
//printf("%pn",shm_id);
shm_addr=shmat(shm_id,NULL,0);
printf("shm_addr=%dn",*shm_addr);
shm_id=shmget(*shm_addr,1024,0777);
ptr=shmat(shm_id,NULL,0);
printf("ptr=%Xn",ptr);
printf("%dn",__LINE__);
printf("ptr->buff=%Xn",ptr->buff);
printf("%sn",ptr->buff);//这里报错
printf("%dn",__LINE__);
ptr=ptr->next;
printf("ptr=%Xn",ptr);
//printf("%sn",ptr->next->buff);
}
希望大家帮助。
下面是第二个程序,在key=101的里面存了共享链表的头地址
#include
#include
#include
typedef struct _LinkNode
{
void *buff;
struct _LinkNode *next;
}LinkNode;
main()
{
int shm_id,*shm_addr;
LinkNode *ptr;
shm_id=shmget(101,64,0777);
//printf("%pn",shm_id);
shm_addr=shmat(shm_id,NULL,0);
printf("shm_addr=%dn",*shm_addr);
shm_id=shmget(*shm_addr,1024,0777);
ptr=shmat(shm_id,NULL,0);
printf("ptr=%Xn",ptr);
printf("%dn",__LINE__);
printf("ptr->buff=%Xn",ptr->buff);
printf("%sn",ptr->buff);//这里报错
printf("%dn",__LINE__);
ptr=ptr->next;
printf("ptr=%Xn",ptr);
//printf("%sn",ptr->next->buff);
}
|
printf("%sn",ptr->buff);//这里报错
改
printf("%sn",(char *)(ptr->buff) );
试试看
我的电脑编译没有错,gcc4.0.3下
改
printf("%sn",(char *)(ptr->buff) );
试试看
我的电脑编译没有错,gcc4.0.3下