首页 > 解决方案 > 不允许 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

标签: iosiphonemkfifo

解决方案


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

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

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

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


推荐阅读