共享内存 读取链表,该如何处理
共享内存 读取链表
两个程序,第一个向共享内存里存链表结构体,第二个读取数据,但是读取总是报错。
希望大家帮助。
下面是第二个程序,在key=101的里面存了共享链表的头地址
#include <stdio.h>
#include <sys/shm.h>
#include <sys/ipc.h>
typedef struct _LinkNode
{
void *buff;
struct _LinkNode *next;
}LinkNode;
main()
{
int shm_id,*shm_addr;
LinkNode *ptr;
shm_id=shmget(101,64,0777);
//printf( "%p\n ",shm_id);
shm_addr=shmat(shm_id,NULL,0);
printf( "shm_addr=%d\n ",*shm_addr);
shm_id=shmget(*shm_addr,1024,0777);
ptr=shmat(shm_id,NULL,0);
printf( "ptr=%X\n ",ptr);
printf( "%d\n ",__LINE__);
printf( "ptr-> buff=%X\n ",ptr-> buff);
printf( "%s\n ",ptr-> buff);//这里报错
printf( "%d\n ",__LINE__);
ptr=ptr-> next;
printf( "ptr=%X\n ",ptr);
//printf( "%s\n ",ptr-> next-> buff);
}
------解决方案--------------------
一个读一个写,貌似要用 锁、关键代码段 等
------解决方案--------------------
如果 ptr-> buff 为NULL
printf( "%s\n ",ptr-> buff);就会报错
两个程序,第一个向共享内存里存链表结构体,第二个读取数据,但是读取总是报错。
希望大家帮助。
下面是第二个程序,在key=101的里面存了共享链表的头地址
#include <stdio.h>
#include <sys/shm.h>
#include <sys/ipc.h>
typedef struct _LinkNode
{
void *buff;
struct _LinkNode *next;
}LinkNode;
main()
{
int shm_id,*shm_addr;
LinkNode *ptr;
shm_id=shmget(101,64,0777);
//printf( "%p\n ",shm_id);
shm_addr=shmat(shm_id,NULL,0);
printf( "shm_addr=%d\n ",*shm_addr);
shm_id=shmget(*shm_addr,1024,0777);
ptr=shmat(shm_id,NULL,0);
printf( "ptr=%X\n ",ptr);
printf( "%d\n ",__LINE__);
printf( "ptr-> buff=%X\n ",ptr-> buff);
printf( "%s\n ",ptr-> buff);//这里报错
printf( "%d\n ",__LINE__);
ptr=ptr-> next;
printf( "ptr=%X\n ",ptr);
//printf( "%s\n ",ptr-> next-> buff);
}
------解决方案--------------------
一个读一个写,貌似要用 锁、关键代码段 等
------解决方案--------------------
如果 ptr-> buff 为NULL
printf( "%s\n ",ptr-> buff);就会报错