ios - 不允许 iOS mkfifo() 操作
问题描述
我有以下代码,我从 Xcode 中的 Swift 主程序调用,例如,在虚拟 iPhone 的模拟器中运行它时,它可以工作。它创建/tmp/MYFIFO
.
int32_t init_udpC(void) {
static char *filename="/tmp/MYFIFO";
umask(0);
unlink(filename);
if((mkfifo(filename, 0666)) == -1){
perror("mkfifo");
exit(2);
}
if((fd=open("/tmp/MYFIFO",O_RDWR|O_APPEND)) == -1) {
perror("open");
exit(2);
}
return fd;
}
在代码失败的物理设备上运行它
mkfifo: Operation not permitted
解决方案
这是因为 iOS 沙盒。在 iOS 上,不允许您的应用访问/tmp/
. 它可以在模拟器中运行,因为您在 macOS 上运行,这没问题。
您需要使用允许您的应用访问的路径。一种可能性是将路径替换为
const char *filename=[[NSTemporaryDirectory() stringByAppendingPathComponent:@"MYFIFO"] UTF8String];
还有其他有效路径——关键是您必须被允许访问该目录。
推荐阅读
- swift - 对 ! 的语法感到困惑 此代码中的运算符
- sqlite - 如何使用“我的文档”文件夹作为 sqlite 数据库路径?
- sqlite - 如何使用 Sqlite 在 blob 字段中编写图像 png 的二进制代码?
- proguard - 如何修复 Proguard 删除 java.security 代码
- sql-server - 创建非聚集索引超时
- python - 熊猫列名中的Python编码问题\ufeff
- sql - 如何请求不区分大小写的对象
- javascript - 基于语言的特定 cookie 作为子域
- reactjs - 如何使用 jasmine 和酶测试 React useEffect hooks
- php - 基于第一个字符的条件正则表达式长度