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