Если у меня есть программа, которая создает и пытается открыть именованный канал с использованием mkfifo, как я могу открыть канал для чтения или записи без блокировки?Как выполнить неблокирующее fopen на именованном канале (mkfifo)?
В частности, я пишу программу на C, которая может быть запущена с или без gui (написанная на Java).
В программе C, я успешно создать именованные каналы с помощью mkfifo, однако, когда я
FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/
Еореп не возвращается до тех пор, пока не откроется графический интерфейс, который труба для записи. Я хочу, чтобы эта трубка была готова к чтению один раз (если), GUI решает записать на нее - я буду помещать дескриптор файла в вызов select(). Разумно ожидать, что графический интерфейс java никогда не будет запущен, поэтому я не могу полагаться на него, чтобы открыть другой конец канала в любой конкретной точке или даже на всех.
У меня также будет вторая трубка, открытая для записи, и я предполагаю, что у меня будет такая же проблема. Кроме того, я не могу установить O_NONBLOCK на выходной канал, у которого нет считывателя.
Любые предложения?
(Это работает на системе Linux)
Вам нужно открыть выходную трубу перед срабатыванием() на входной трубе? –
@tinkertim - я предполагаю, что технически нет - я установил их обоих в функцию настройки, но я мог просто настроить выходной канал первым, а затем вызвать select, почему? – Zxaos