Операция iOS mkfifo () не разрешена - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть следующий код, который я вызываю из основной программы Swift в XCode, и, например, при запуске его в симуляторе на виртуальном 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

1 Ответ

0 голосов
/ 26 декабря 2018

Это из-за песочницы iOS.На iOS вашему приложению запрещен доступ к /tmp/.Он работает в симуляторе, потому что вы работаете в macOS, где все в порядке.

Вам необходимо использовать путь, по которому вы можете получить доступ к вашему приложению.Одна из возможностей - заменить путь на

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

. Существуют и другие допустимые пути - ключ в том, что вам нужно разрешить доступ к каталогу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...