Bloques abiertos () cuando se intenta abrir una tubería para leer
Tengo dos procesos, un servidor y un cliente, que deben comunicarse a través de canalizaciones (C ++, Linux). El servidor abre la tubería con elO_RDONLY
bandera, y el cliente conO_WRONLY
. Sin embargo, el servidor bloquea enopen
función, mientras que el cliente parece funcionar correctamente (elopen
función devuelve el éxito y también lo hacen loswrite
funciones).
He leído que si elO_NONBLOCK
la bandera está activada, la función de lectura continuará, pero no quiero que continúe si no hay ningún cliente conectado; está bien bloquearhasta que un cliente este conectado, pero en mi caso permanece bloqueado incluso después de que el cliente termina de ejecutarse ...
¿Puedes por favor decirme qué estoy haciendo mal ...?
Aquí está el código:
// Server side
int pipe;
int status, nr_read = 0;
status = mkfifo(FIFO_NAME, 0666);
if (status < 0)
{
// If the file already exists, delete it
unlink(FIFO_NAME);
// Try again
status = mkfifo(FIFO_NAME, 0666);
if(status < 0)
{
printf("mkfifo error: %d\n", status);
return status;
}
}
pipe = open(FIFO_NAME, O_RDONLY);
printf("Never gets here...\n");
[...]
nr_read = read(pipe, my_char_array, CHAR_ARRAY_SIZE);
[...]
close(pipe);
unlink(FIFO_NAME);
Nunca llega a la línea "printf" ...
// Client side:
int pipe, nr_sent = 0;
int status = 0;
pipe = open(FIFO_NAME, O_WRONLY);
if (pipe < 0)
{
printf("open fifo error: %d\n", status);
return pipe;
}
[...]
nr_sent = write(pipe, my_char_array, CHAR_ARRAY_LENGTH);
[...]
close(pipe);
EDITAR
No mencione la linea#define FIFO_NAME "MYFIFO"
... y aquí estaba el problema: como dijo Jody Hagins, siendo la ruta relativa y los procesos iniciados desde diferentes carpetas, intentaban abrir diferentes archivos.