Se ho un programma che crea e tenta di aprire una named pipe usando mkfifo, come posso aprire una pipe per leggere o scrivere senza bloccare?Come si esegue una fopen non bloccante su una named pipe (mkfifo)?
In particolare, sto scrivendo un programma C che può essere eseguito con o senza un gui (scritto in Java).
Nel programma C, creo con successo le named pipe utilizzando mkfifo, tuttavia quando faccio
FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/
fopen non restituisce fino a quando l'interfaccia grafica si apre quel tubo per la scrittura. Quello che desidero fare è che la pipe sia pronta per essere letta una volta (se) la GUI decida di scriverla - inserirò il descrittore di file in una chiamata select(). È ragionevole aspettarsi che la GUI java non venga mai effettivamente avviata, quindi non posso fare affidamento su di essa per aprire l'altra estremità della pipa in un punto specifico o addirittura del tutto.
Avrò anche una seconda pipe aperta per la scrittura e presumo che avrò lo stesso problema. Inoltre, non posso impostare O_NONBLOCK su una pipe di uscita senza lettore.
Qualche suggerimento?
(Questo è in esecuzione su un sistema Linux)
È necessario aprire il tubo di uscita prima di selezionare() l'accensione sul tubo di ingresso? –
@tinkertim - Suppongo tecnicamente no - Avevo impostato entrambi in una funzione di configurazione, ma potevo semplicemente impostare il tubo di uscita prima e poi chiamare select, perché? – Zxaos