我有以下代码,这些代码是从Xcode中的Swift主程序调用的,例如,当在虚拟iPhone中的Simulator中运行它时,它可以工作。它创建/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
答案 0 :(得分:1)
这是因为iOS沙箱。在iOS上,您的应用不允许访问/tmp/
。它可以在模拟器中运行,因为您可以在可以正常运行的macOS上运行。
您需要使用允许您的应用访问的路径。一种可能性是将路径替换为
const char *filename=[[NSTemporaryDirectory() stringByAppendingPathComponent:@"MYFIFO"] UTF8String];
还有其他有效路径-关键是必须允许您访问目录。