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.