ios - 对 ios7 的 shm_open 调用现在导致在 O_CREAT (EPERM) 期间不允许操作

标签 ios objective-c ipc ios7 shared-memory

我维护了一个 iOS 应用程序的共享内存部分,该部分在最新版本之前一直运行良好。该代码不再允许我执行 O_CREAT 来初始化共享内存段。

似乎失去功能的代码与此类似:

int shm_fd;
if ((shm_fd = shm_open(SHM_PATH, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO)) < 0){
    /** Handle failure  */
} else {
    /** Handle Success  */
}

这个代码片段直到最近都很好用。现在它失败了,将 errno 设置为 EPERM。

如果它有帮助,它仍然可以在模拟器中完美运行。

其他人也失去了这种能力吗?有什么办法可以解决这个问题?

编辑 1:如果认为无法使用我的旧方法,我想知道我能做些什么来模拟相同的功能。它是多个应用程序之间共享数据的来源。所有知道它的应用程序都可以查看和修改数据。

编辑 2:根据developer forums , IPC 在最新版本中已被削弱。已提交错误报告,因为它也会影响进程内通信。希望这将得到修复,但与此同时,我将寻找一种复制功能的方法。

最佳答案

经过长时间的研究,我们放弃了挽救我们旧的 IPC 方法。我们的解决方法如下:

为了在我们的应用程序套件之间共享信息,我们决定使用 iOS 钥匙串(keychain)。

为了让我们更轻松,我们发现有人已经将所有钥匙串(keychain)功能打包到一个更易于使用的包中here .

这允许我们在应用程序之间发送我们的数据,只要应用程序具有相同的应用程序标识符。

不理想,但它为我们完成了工作。

关于ios - 对 ios7 的 shm_open 调用现在导致在 O_CREAT (EPERM) 期间不允许操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19004132/

相关文章:

IOS - 没有 "touchend"事件(非全屏 Web View )

objective-c - CW网络安全模式信息

ios - 为什么图像用CGImage :scale:orientation: doesn't work?

ios - iOS 的可重用组件

ios - NSURLSessionDataTask 是否在后台暂停?

objective-c - MKCoordinateRegion 中心和边界之间的距离

c++ - C++ 中用于可变长度记录的无锁共享内存

c - 检查另一个程序的输出的程序

c - 为什么我的输入通过管道发送到进程时会延迟?

ios - 如何在 FSCalendar 中获取月份