当前位置:  技术问答>linux和unix

共享内存问题,只能得到int值,不能得到char*的值?

    来源: 互联网  发布时间:2015-08-28

    本文导语:  我定义了一个结构,结构中有int,char *, 但是程序可以从共享内存中取得int值,却不可以得到 char * 的值。 下面是程序。 === linux_s.c ==== /* Includes */  #include   #include   #include   #include   #include   #include   #in...

我定义了一个结构,结构中有int,char *, 但是程序可以从共享内存中取得int值,却不可以得到 char * 的值。
下面是程序。
=== linux_s.c ====
/* Includes */ 
#include  
#include  
#include  
#include  
#include  
#include  
#include  

typedef struct 

int id; 
char *name; 

} student; 

main() 


/* local variables */ 
int ret= 0; 
key_t key; 
int i; 
int shm_id; 

student *com_student; 
key = ftok(".",'1'); 
char *tmp;
/* create a share memory if not exist */ 
if ((shm_id = shmget(key ,sizeof(student),IPC_CREAT|IPC_EXCL|0666)) == -1) 

/* share memory has been created */ 
if ((shm_id = shmget(key , sizeof(student),0)) == -1) 

printf("error = %dn", errno); 
return (ret); 


com_student = (student *) shmat(shm_id, (student *) 0, 0); 
com_student->name = (char *)malloc(sizeof(char)*20);
memset(com_student->name,'',20);
com_student->id= 110; 
sprintf(com_student->name,"%s","Liuyongsh");
printf("student's id=%dn", com_student->id); 
printf("stduent's name=%xn", com_student->name); 
printf("stduent's name=%sn", com_student->name); 
if(shmdt(com_student)==-1)
  perror(" detach error ");



========linux_c.c=======

#include  
#include  
#include  
#include  
#include  
#include  
#include  

typedef struct 

int id; 
char *name; 

} student; 

main() 


/* local variables */ 
int ret= 0; 
key_t key; 
int i; 
int shm_id; 
int found = 0; 
student *com_student; 
key = ftok(".",'1');

/* share memory has been created */ 
if ((shm_id = shmget(key , sizeof(student),0)) == -1) 

printf("error = %dn", errno); 
return (ret); 


com_student = (student *) shmat(shm_id, (student *) 0, 0); 

printf("student's id=%dn", com_student->id); 
printf("stduent's name=%xn", com_student->name); 
printf("stduent's name=%sn", com_student->name); 

/* kill share memory */ 

//shmctl(shm_id,IPC_RMID,0); 
if(shmdt(com_student)==-1)
  perror(" detach error ");

exit(0);
}

屏幕输出是这样的:
[liuys@dispam megshm]$ ./linux_s
student's id=110
stduent's name=80498f8
stduent's name=Liuyongsh
[liuys@dispam megshm]$ ./linux_c
student's id=110
stduent's name=80498f8
stduent's name=                           //地址一样,这里却没有输出。

拜托各位大哥指点一下。

|
可以定义成
typedef struct
{
int id;
char name[20];
} student;

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux 共享内存介绍及实现代码
  • 多个进程对系统V共享内存进行读写,怎样实现对共享内存部分进行加解锁?
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)
  • 程序需要共享内存相当大,但是系统的内存有限
  • 请详细介绍一下共享内存机制~~ iis7站长之家
  • 请教一个关于内存分配的问题(系统和DMA共享一块物理内存空间)
  • 不同用户user之间如何访问共享内存?
  • Unix/linux下如何监测共享内存的使用情况
  • 共享内存问题,高手们请进!!!
  • 判断共享内存中是否有数据
  • 【求助】linux下什么是共享内存,怎么查看。
  • linux下共享内存的覆盖或清空
  • 进程同时访问两个大共享内存,会失败?
  • 共享内存和信号灯同步问题
  • 为什么不将数据直接写入共享内存?
  • aix 的开个共享内存的问题
  • linux下共享内存 函数shmat()的使用!
  • 请详细介绍一下共享内存机制~~
  • 初学者关于共享内存的几个问题-->
  • 文件描述符的限制?(共享内存)
  • 在语言中,什么是共享内存,怎样使用,举例?
  • NFS共享作业时, 在客户端只可以看到服务器端的共享目录,而看不到共享目录下的内容.?
  • 如何共享 共享库(*.so)中的变量?
  • 局域网共享问题:win2000的机器看不到linux机器的共享目录?
  • 用samba共享其它机子访问Linux共享时,机子可以进入,但要打开共享文件夹时提示“无法访问...找不到网络名。”这是什么原因呢?
  • 局域网中的红旗2.0如何共享到win98服务器的联接共享?
  • 局域网共享问题:win2000的机器看不到linux机器的共享目录?解决立即给分
  • 几个servlet共享一些数据 如我从数据库里读出一些重要的设置存入vector 让几个servlet共享 怎么做到?先谢
  • 求助linux普通用户下内存共享(系统V共享)大家进来看看啊!急!!
  • 关于中断共享的问题:ADC 与触摸屏的中断共享
  • 无法访问samba服务器中的共享文件夹


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3