不允许iOS mkfifo()操作

时间:2018-12-26 15:59:45

标签: ios iphone mkfifo

我有以下代码,这些代码是从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

1 个答案:

答案 0 :(得分:1)

这是因为iOS沙箱。在iOS上,您的应用不允许访问/tmp/。它可以在模拟器中运行,因为您可以在可以正常运行的macOS上运行。

您需要使用允许您的应用访问的路径。一种可能性是将路径替换为

const char *filename=[[NSTemporaryDirectory() stringByAppendingPathComponent:@"MYFIFO"] UTF8String];

还有其他有效路径-关键是必须允许您访问目录。