Да, и это должно заблокировать в select (). Нет таких решений для конца записи канала, вероятно, лучшее, что вы могли бы сделать, это открыть конец записи после того, как вы получили приглашение от программы Java

у меня есть программа, которая создает и пытается открыть именованный канал с помощью mkfifo, как я могу открыть канал для чтения или записи без блокировки?

В частности, я пишу программу на C, которую можно запускать с графическим интерфейсом или без него (написанный на Java).

В программе C я успешно создаю именованные каналы, используя mkfifo, однако, когда я делаю

FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/

fopen не возвращается, пока графический интерфейс не открывает этот канал для записи. Что я хочу сделать, так это подготовить этот канал для чтения один раз (если) GUI решит записать в него - я буду помещать дескриптор файла в вызов select (). Разумно ожидать, что java GUI на самом деле никогда не запустится, поэтому я не могу рассчитывать на то, что он откроет другой конец канала в какой-то конкретной точке или даже вообще.

У меня также будет открыт второй канал для записи, и я предполагаю, что у меня будет та же проблема. Кроме того, я не могу установить O_NONBLOCK на выходной канал, который не имеет читателя.

Какие-либо предложения?

(Это работает в системе Linux)

Ответы на вопрос(1)

Ваш ответ на вопрос