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