我正在尝试在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。
答案 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