我正在尝试在 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 共享内存?标头和库都存在,否则编译器/链接器会抱怨。相同的代码可以在模拟器上运行。我究竟做错了什么?
我的兴趣源于这个问题.
The shm_open()/mmap()
组合在模拟器和设备上(在 iOS 4 上测试)上都像宣传的那样工作,无需任何明确的权限更改。
Note: shm_open()
奇怪地被记录为可变参数。实际上,您需要使用访问掩码指定第三个参数 - 组合S_IRUSR
- 像标志,或八进制chmod
value.
编辑:看起来它在 iOS 7 中崩溃了。即使指定了 O_CREAT 标志,shm_open 也会返回 -1 且 errno=2 (ENOENT)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)