社区
Linux/Unix社区
帖子详情
若问一个进程间的通信问题。
yydrewdrew
2007-06-01 03:39:51
我用共享内存实现进程间的通信。
用shmget和shmat实现内存的分配和映射。
得到指针void *ptr指向分配的地址;
将ptr转换成类的指针class*运行出现Segmentation fault。
若将ptr指向结构体就没问题,但是结构体里有诸如string变量的话就会出现同样错误。
是不是因为shmget和shmat是c调用所以不能存c++的类?
共享内存分配有没有面向c++的?
string这个变量我必须传,麻烦大家帮我想想办法。
...全文
235
3
打赏
收藏
若问一个进程间的通信问题。
我用共享内存实现进程间的通信。 用shmget和shmat实现内存的分配和映射。 得到指针void *ptr指向分配的地址; 将ptr转换成类的指针class*运行出现Segmentation fault。 若将ptr指向结构体就没问题,但是结构体里有诸如string变量的话就会出现同样错误。 是不是因为shmget和shmat是c调用所以不能存c++的类? 共享内存分配有没有面向c++的? string这个变量我必须传,麻烦大家帮我想想办法。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hundlom
2007-06-02
打赏
举报
回复
你申请的共享内存大小是固定的,可 struct multi_data*cc = (struct multi_data*)(aa);时结构体的大小因为string类型却无法固定大小。
yydrewdrew
2007-06-01
打赏
举报
回复
我把代码发出来:
#include <sys/types.h>
#include <sys/ipc.h>
#include <string>
#include <sys/shm.h>
using namespace std;
struct multi_data
{
int m;
string a;
};
int main()
{
void *aa = NULL;
int shmid;
int key;
key = ftok(".",1);
shmid = shmget(key,64*64,IPC_CREAT|0666);
aa = shmat(shmid,0,0);
string b = "";
string a("hdfhdjfhdj");
struct multi_data*cc = (struct multi_data*)(aa);
cc->a = a;
b = cc->a;
return 0;
}
如果去掉multi_data里的string a,传int m话,就会成功。
yydrewdrew
2007-06-01
打赏
举报
回复
错误是发生在赋值时:比如将一个string变量值赋给ptr->string成员。
Android专用驱动
Android专用驱动构成了Android运行时的基石。从技术上来讲,Android专用驱动也是整个Android系统的亮点,特别是Binder驱动。Binder是一种
进程
间
通信
机制(IPC),它与传统的IPC机制对比,最大的特点是高效,因为
通信
数据在两个
进程
之
间
只需要执行一次拷贝即可。Binder在Android系统里面使用得非常广泛以及频繁。在涉及到比较大的
通信
数据时,Binder通常还结合另外
一个
驱动Ashmem来使用。Ashmem是
一个
共享内存驱动,它与传统的共享内存相比,最大的特点是它是通过文件描述符来描述的,并且可以动态地进行分块管理。动态分块管理的目的是可以将部分不再使用了的内存交回给系统,非常适合内存较小的移动设备使用。另外
一个
专用驱动Logger是
一个
日志驱动,它与传统的日志系统对比,特点是日志是记录在内核空
间
而非文件中,这样就可以提高日志的读写速度。这个PPT讲Logger、Binder和Ashmem三个Android专用驱动的实现原理。由于这三个驱动在Android源代码里面用得非常广泛和频繁,因此理解它们的实现原理,就可以掌握Android的精华。这对以后阅读Android系统的其它代码,也是非常有帮助的。
Socket编程例子
Socket编程例子
Linux
进程
间
通信
目录
进程
间
通信
介绍
进程
间
通信
的概念
进程
间
通信
目的
进程
间
通信
分类
进程
间
通信
的本质
进程
间
通信
介绍
进程
间
通信
的概念
进程
间
通信
又称IPC(Inter-Process Communication),指多个
进程
之
间
相互
通信
,交换信息。
进程
间
通信
目的 数据传输:
一个
进程
需要将它的数据发送给另
一个
进程
资源共享: 多个
进程
之
间
共享同样的资源。 通知事件:
一个
进程
需要向另
一个
或一组
进程
发送消息,通知它(它们)发生了某种事件(如
进程
终止时要通知父
进程
)。
进程
控制: 有些
进程
希望完全控制另
一个
进程
的执行(如Deb
进程
间
通信
——管道
文章目录
进程
间
通信
介绍
进程
间
通信
目的
进程
间
通信
发展
进程
间
通信
分类管道什么是管道匿名管道实例代码用fork来共享管道原理站在文件描述符角度-深度理解管道站在内核角度-管道本质管道读写规则命令行中的 `|` 管道中,
进程
间
是兄弟关系管道特点命名管道创建
一个
命名管道匿名管道与命名管道的区别命名管道的打开规则用命名管道实现server&client
通信
进程
间
通信
介绍
进程
间
通信
目的 数据传输:
一个
进程
需要将它的数据发送给另
一个
进程
资源共享:多个
进程
之
间
共享同样的资源。 通知事件:
一个
进程
需要向另
一个
进程
间
通信
和线程
间
通信
总结
写在前面 面试的时候一定不要疲劳战,比如上午面了
一个
,然后中午不休息直接赶到另外
一个
相距比较远的公司,影响状态。 面试的时候一定不要紧张,不管对方有几个人,总之面试的时候做好充分准备,休息好,放松心态。 好了,言归正传,开始总结。 【1】
进程
间
通信
方式
进程
间
通信
又称IPC(Inter-Process Communication),指多个
进程
之
间
相互
通信
,交换信息的方法。根据
进程
通信
时信息量大小的...
Linux/Unix社区
23,217
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章