QNX进程间可以访问其他进程的私有地址空间吗?

中文QNX 讨论: 欢迎大家灌水,讨论有关QNX 问题。
回复
vansharp
Senior Member
帖子: 49
注册时间: 周五 1月 16, 2009 10:40 am

QNX进程间可以访问其他进程的私有地址空间吗?

帖子 vansharp » 周二 6月 01, 2010 9:31 am

QNX进程间如何开辟不定大小的共享内存呢?
现在假设有进程A和B要进行数据交互:
进程A:根据实际运行信息去分配malloc 1~32块固定大小的内存,并进行写信息操作;
进程B:去读进程A分配的相应内存块信息;
现在把进程A所分配的1~32块固定大小的内存的虚拟地址共享出来,请问进程B有没有办法去读进程A的私有地址呀? :?:
即类似于windows下的ReadProcessMemory().

weishengshou
Senior Member
帖子: 48
注册时间: 周二 1月 09, 2007 10:10 pm

Re: QNX进程间可以访问其他进程的私有地址空间吗?

帖子 weishengshou » 周二 6月 01, 2010 5:19 pm

vansharp 写了:QNX进程间如何开辟不定大小的共享内存呢?
现在假设有进程A和B要进行数据交互:
进程A:根据实际运行信息去分配malloc 1~32块固定大小的内存,并进行写信息操作;
进程B:去读进程A分配的相应内存块信息;
现在把进程A所分配的1~32块固定大小的内存的虚拟地址共享出来,请问进程B有没有办法去读进程A的私有地址呀? :?:
即类似于windows下的ReadProcessMemory().
对于不定大小的共享内存,可不可以这样:
1、先建一个存放共享内存信息的共享内存SWinfo
2、A建立一个共享内存SWA1,同时通知SWinfo,放入A建立的共享内存的信息
3、B去通过SWinfo知道有SWA1及其信息,让B去map
4、A又建立一个,同样操作。
另外,让B去读A的私有地址,不知道你用的什么版本。qnx6下用ptrace函数就可以,qnx4下我也不知道由没有直接能获取的。有些方法,太变态,不通用,就不说了

vansharp
Senior Member
帖子: 49
注册时间: 周五 1月 16, 2009 10:40 am

帖子 vansharp » 周二 6月 01, 2010 5:42 pm

我现在的处理就是先建立好一个用于标识多块共享内存信息
进程A创建若干块固定大小的共享内存块,同时通过发MsgSend通知进程B,打开相应的内存块操作。暂时好像没什么问题,不知道QNX的MsgSend信道交互足够可靠不,会不会产生丢失的问题。所以同时做了个用于标识多块共享内存信息的一个共享内存供查询。
还有一个问题是访问进程间私有空间的问题:
假设进程A用malloc开辟的一块内存块,进程B有没有办法去获取对这块内存块的控制权?

vansharp
Senior Member
帖子: 49
注册时间: 周五 1月 16, 2009 10:40 am

帖子 vansharp » 周二 6月 01, 2010 5:43 pm

对了,我现在用的版本是6.4.0 :lol:

xtang
Moderator
帖子: 1816
注册时间: 周五 9月 12, 2003 4:14 am
来自: China

帖子 xtang » 周三 6月 02, 2010 10:44 am

malloc()出来的地址是私有的,无法share给别的进程;需要共享的内存必须通过shm_open()/mmap()等专用函数来取得。

关于可变大小共享内存,在另一个帖子里讨论过了。

viewtopic.php?t=2528

回复