iOS上的低级共享内存

时间:2012-07-21 02:51:43

标签: ios objective-c ios-simulator ipc shared-memory

我正在尝试在iOS上构建一个共享内存块。它编译和链接,但是shmget()抛出一个SIGSYS信号的最无辜的参数:

NSString *p = [[NSBundle mainBundle] pathForResource:@"crash" ofType: nil];
key_t tok = ftok([p UTF8String], 918273);
int mid = shmget(tok, 4096, IPC_CREAT|S_IRUSR|S_IWUSR);

tok是一个大的正整数,而不是-1。大小 - 试过1024,效果相同。

iOS上是否支持SysV共享内存?标题和库存在,或编译器/链接器会抱怨。相同的代码适用于模拟器。我做错了什么?

我的兴趣来自this question

2 个答案:

答案 0 :(得分:2)

shm_open()/mmap()组合在宣传时工作,无论是在模拟器上还是在设备上(在iOS 4上测试过),都没有任何明确的权限更改。

注意:shm_open()奇怪地记录为可变参数。实际上,您需要使用访问掩码指定第三个参数 - S_IRUSR - 类似标志的组合,或八进制chmod值。

编辑:在iOS 7中看起来像是坏了。即使指定了O_CREAT标志,shm_open也会以errno = 2(ENOENT)返回-1。

答案 1 :(得分:1)

在iOS上,您根本无法使用共享内存 我不知道确切的细节,但我知道a)它的安全性和b)它的沙盒环境的一部分

所以我从上面了解自己以及我在越狱场景中的存在,但是这里有一些描述沙盒的链接以及它们如何影响共享内存

http://www.trailofbits.com/resources/ios4_security_evaluation_paper.pdf

http://lists.apple.com/archives/cocoa-dev/2012/Apr/msg00535.html