1
我正在使用虚拟地址使用shmat()。如何以确保的方式将虚拟地址传递给shmat()函数
所述第一进程调用与shmaddr所一个的shmat为空,并且当它得到的数据的虚拟地址阻止它存储在另一个共享memeory地方。
第二个进程使用第一个进程存储在共享memeory中的virtaul地址调用shmat()。
在大多数情况下,第二个进程通常可以附加到相同的虚拟地址,但在一种情况下,我不能和shmat返回-1,并且当我使用gdb时,我看到地址是Bad地址。
(gdb) x 0x800852000 0x800852000: Error accessing memory address 0x800852000: Bad address.
所以我的问题是如何保证在第一时间,我得到这两个 过程可以看到虚拟地址?
我不得不说,如果你可以让系统选择最好的地址给你(和首选使用共享内存)并使您的代码更加便携。 – 2011-03-04 01:11:06
我想使用固定地址来允许进程通过存储地址来读取特定地址的内容。就像在第一个进程中存储另一个进程可以直接从中读取的地址一样...没有偏移量 – 2011-03-04 22:18:55
如果您更改第一个进程以将shmaddr设置为不太可能使用的地址范围(除非进程变得非常大),那么你的问题应该消失。但是,这样做的时候,除非你完全控制你使用的所有代码和库的功能,否则没有保证。所以,你所能做的就是选择一个不太可能被使用的地址范围。在我们的例子中,0x0000005000000000每次都有效。 – 2011-03-05 10:00:12