Si tengo un programa que crea e intenta abrir un conducto con nombre usando mkfifo, ¿cómo puedo abrir un conducto para leer o escribir sin bloquear?¿Cómo realizo un fopen sin bloqueo en una tubería con nombre (mkfifo)?
Específicamente, estoy escribiendo un programa en C que se puede ejecutar con o sin gui (escrito en Java).
En el programa C, se crea con éxito las canalizaciones con nombre usando mkfifo, sin embargo cuando lo haga
FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/
fopen no vuelve hasta que la interfaz gráfica de usuario que abre la tubería para la escritura. Lo que deseo hacer es tener esa tubería lista para ser leída una vez (si) la GUI decide escribir en ella - Colocaré el descriptor de archivo en una llamada select(). Es razonable esperar que la GUI java nunca se inicie realmente, por lo que no puedo confiar en que abra el otro extremo de la tubería en ningún punto específico o incluso en absoluto.
También tendré una segunda pipa abierta para escribir, y supongo que tendré el mismo problema. Además, no puedo configurar O_NONBLOCK en una tubería de salida que no tiene lector.
¿Alguna sugerencia?
(Esto se ejecuta en un sistema Linux)
¿Necesita abrir la tubería de salida antes de seleccionar() disparar en la tubería de entrada? –
@tinkertim - Supongo que técnicamente no: los configuré a ambos en una función de configuración, pero podría simplemente configurar primero el conducto de salida y luego llamar a seleccionar, ¿por qué? – Zxaos