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

难道这样使用共享内存中的指针变量是不允许的吗?

    来源: 互联网  发布时间:2016-04-25

    本文导语:  难道这样使用共享内存中的指针变量是不允许的吗? 自己定义一个结构,例如 struct t1{ int i; char* p; }pt; 正确创建共享内存后,pt指向共享内存首地址,将p指向这块内存的某个区域mem1,然后从p开始写入一些字符! ...

难道这样使用共享内存中的指针变量是不允许的吗?

自己定义一个结构,例如
struct t1{
int i;
char* p;
}pt;

正确创建共享内存后,pt指向共享内存首地址,将p指向这块内存的某个区域mem1,然后从p开始写入一些字符!

第二个程序同样连接这块内存,获得指针pt,从而获得p的值,但是,很奇怪,使用p的任何操作都不能获得正确的值(也就是p的指向发生了变化),但是i的值是正确的

重新将p手动设置指向mem1,发现,里面的内容是正确的,是刚刚写入的值

问:难道指针p在每次连接共享内存的时候,都要手动设置其指向吗?

RED HAT AS4系统

|
因为这个共享内存在两个进程的进程地址空间映射的地址是不相同的,所以要使用相对地址(相对pt)而不是各自进程中的绝对地址

|
分清物理地址跟逻辑地址,进行了共享内存映射后,不同进程内指向该共享内存的地址(逻辑地址)可能是不一样的,但该不同的逻辑地址映射的是同一块物理地址。

|
内存指针p 指向的是进程内存空间中的偏移地址,而不是绝对的物理地址。
attach只是一方面,它的作用是将共享内存映射到你的进程空间中去。

你的描述中说到,
能否理解成,你的这个构造体也作成了共享内存?如果是这样的话,这里就不能存放内存指针了。

每个进程内部,只需要attach一次就可以得到共享内存访问地址了。
不同进程就需要分别独立的进行attach。

    
 
 

您可能感兴趣的文章:

  • C++ I/O 成员 tellg():使用输入流读取流指针
  • busybox中的gzip运行过程中出现page fault错误,并指出出错的指针,但是怎么使用gdb调试,找到指针对应的语句?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 关于指针变量,struct 变量,指针使用的一些疑惑,望高手指教
  • 敢问哪位可以告之使用指针的心得??
  • 一个关于指针使用的问题?
  • Linux下如何使用智能指针
  • Java中的this指针使用方法分享
  • 关于一些结构中的指针的使用疑惑
  • 协议的设计一般采用结构体进行数据打包,在协议设计的结构体中能不能使用指针 ?
  • 我刚刚安装了Fedora7,但却没有鼠标指针,但却可以使用.不知道为什么?请求高手指点?谢谢!
  • c/c++ 使用指针函数后的内存怎么处理?
  • arm-elf-gcc编译时如何强制其使用长指针?
  • 基于C++ map中key使用指针问题的详解
  • c++函数指针使用示例分享
  • c++ 指针与引用的区别介绍及使用说明
  • 关于C++使用指针 堆和栈的区别分析
  • 用dlopen和dlsym得到的函数指针,在dlclose后还能继续使用么?
  • 指针与const限定符的使用分析
  • 从汇编看c++中引用与指针的使用分析
  • C++中智能指针如何设计和使用
  • linux 下设置环境变量 使用了setenv 和putenv 在程序结束以后 发现变量又变回去了
  • busybox中的gzip运行过程中出现page fault错误,并指出出错的指针,但是怎么使用gdb调试,找到指针对应的语句? iis7站长之家
  • linux内核怎么定义汇编全局变量及在c文件中使用这个变量?有关0。11下的字符回显
  • 在shell中使用mail函数的时候如何使用变量
  • 在JBUILDER中如何使用全局变量,最好举一个例子。我也不知道在哪里定义全局变量?
  • 网卡驱动使用全局变量
  • 在ACC变成中要使用发ftp传送文件,但文件名不确定,请问怎么样在程序的FTP中使用字符串变量???
  • 请教:使用什么命令查看导出的环境变量?
  • gdb中使用set给变量赋值的问题
  • Makefile中的变量先使用后定义的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 警告:ISO C90 不允许混合使用声明和代码
  • 使用fcntl加强制锁,是不是一定要把这个文件系统设置为允许强制锁阿?
  • 局域网共享上网,使用nat时在postrouting中添加masquerade规则允许往外发送,prerouting是不是也要添加规则。
  • Python不使用print而直接输出二进制字符串
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • Office 2010 Module模式下使用VBA Addressof
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • c#中SAPI使用总结——SpVoice的使用方法
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • c/c++预处理命令预#,##使用介绍
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • 在div中使用css让文字底部对齐的方法
  • Jsp可否使用带有GUI的JavaBean,如何使用?
  • Python namedtuple(命名元组)使用实例
  • asp程序使用的access在Linux下如何使用!
  • MySQL Workbench的下载安装与使用教程
  • 新装的Linux使用root用户不能使用FTP?
  • nginx Windows版相关问题及使用说明
  • LINUX下使用Eclipse,如何使用交叉编译器?


  • 站内导航:


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

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

    浙ICP备11055608号-3