open () blokuje podczas próby otwarcia potoku do odczytu

Mam dwa procesy, serwer i klienta, które powinny komunikować się za pomocą potoków (C ++, Linux). Serwer otwiera potok za pomocąO_RDONLY flaga, a klient zO_WRONLY. Jednak bloki serwerów na stronieopen funkcja, podczas gdy klient wydaje się działać poprawnie (open funkcja zwraca sukces, podobnie jakwrite Funkcje).

Przeczytałem to, jeśliO_NONBLOCK flaga jest ustawiona, funkcja odczytu będzie kontynuowana, ale nie chcę, aby kontynuowano, jeśli żaden klient nie jest podłączony - blokowanie jest w porządkudopóki klient nie jest podłączony, ale w moim przypadku pozostaje zablokowany nawet po zakończeniu działania klienta ...

Czy możesz mi powiedzieć, co robię źle ...?

Oto kod:

// 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);

Nigdy nie dociera do linii „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);

EDYTOWAĆ

Nie wspomniałem o linii#define FIFO_NAME "MYFIFO"

... i tu był problem: jak powiedziała Jody Hagins, ścieżka jest względna, a procesy uruchamiane z różnych folderów, próbowali otworzyć różne pliki.

questionAnswers(1)

yourAnswerToTheQuestion