Можно ли создать и использовать файл FIFO в iOS? (Объект)

Я хочу использовать старый добрый FIFO для передачи данных в другую часть моего собственного приложения для iOS. Я посмотрел на dispatch_io_create_with_path, но я хочу, чтобы другая сторона могла читать данные с помощью обычного чтения(). Можно ли использовать файл FIFO? как?

Я попробовал следующий код в Xcode7 ObjC (путь указывает на каталог документов + имя файла):

res = mkfifo(path, 0x777);

int fd;
fd = open(path, O_WRONLY);
write(fd, "test", 5);
close(fd);

mkfifo() возвращает 0, но open() завершается с ошибкой -1. Интересно, что если я попытаюсь открыть() с 'O_RDONLY', программа будет ждать, значит, там что-то происходит..


person gheni4    schedule 06.07.2016    source источник
comment
Почему вы хотите сделать это через файл? Вы смотрели на этот stackoverflow.com/questions /13129233/ ? Чем это отличается от того, что вы хотите/нужно?   -  person Losiowaty    schedule 06.07.2016
comment
Не уверен, что это полезно, но просматривая файлы FIFO, я нашел However, it has to be open at both ends simultaneously before you can proceed to do any input or output operations on it. Opening a FIFO for reading normally blocks until some other process opens the same FIFO for writing, and vice versa.   -  person Putz1103    schedule 06.07.2016
comment
@Losiowaty Обратите внимание, что я спрашиваю о «другом FIFO». Не «первый пришел — первый вышел», а тип файла, поддерживаемый Unix/Linux/Mac OS X. Я хочу передать данные в статическую библиотеку, которая требует «filePath» без фактической записи данных в файл. Я не ожидаю никакого поиска ()   -  person gheni4    schedule 06.07.2016
comment
@Putz1103 Putz1103 Точно моя точка зрения - блоки open() 'read', поэтому похоже, что это работает, но я не могу заставить его открыться для записи()   -  person gheni4    schedule 06.07.2016
comment
Ох, хорошо. Я не знал о них, думаю, сегодня я узнаю что-то новое :)   -  person Losiowaty    schedule 06.07.2016
comment
Вы пытались открыть if для чтения в асинхронном блоке (который блокирует и ждет), а затем открыть его для записи?   -  person Putz1103    schedule 06.07.2016
comment
@ Putz1103 Putz1103 Пробовал несколько сценариев с dispatch_async() и dispatch_after() для открытия для write(), когда читатель готов и ожидает. Тот же результат: очередь чтения заблокирована, а писатель не может открыть ()   -  person gheni4    schedule 07.07.2016


Ответы (1)


omg не могу поверить, что потратил на это часы... ну вот: ошибка в части "0x777". Должно быть "0777". После исправления у меня FIFO работает нормально (iOS 9.2.1).

person gheni4    schedule 07.07.2016
comment
Какой путь вы выбрали здесь? Я думал, что в iOS файловая система изолирована. - person gran_profaci; 07.01.2017
comment
@gran_profaci Мне пришлось передать данные в статическую библиотеку, которая была частью моего проекта, который ожидает путь к файлу, но я не хотел записывать все эти данные в файл. Все происходило локально в той же песочнице, так что проблем не было. Я не помню точный путь, но это было обычное имя файла в «Документах». - person gheni4; 08.01.2017