блоки open () при попытке открыть канал для чтения

У меня есть два процесса, сервер и клиент, которые должны общаться через каналы (C ++, Linux). Сервер открывает канал сO_RDONLY флаг, и клиент сO_WRONLY. However, the server blocks at the open функция, в то время как клиент, кажется, работает успешно (open функция возвращает успех, и поэтомуwrite функции).

Я читал, что еслиO_NONBLOCK установлен флаг, функция чтения будет продолжена, но я не хочу, чтобы она продолжалась, если клиент не подключен - блокировка допустимаuntil a client is connected, но в моем случае он остается заблокированным даже после завершения работы клиента ...

Можете ли вы сказать мне, что я делаю не так ...?

Вот код:

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

Он никогда не попадает в & quot; printf & quot; линия...

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

EDIT

Я не упомянул линию #define FIFO_NAME "MYFIFO"

... и здесь была проблема: как сказала Джоди Хагинс, относительный путь и процессы, запускаемые из разных папок, пытались открыть разные файлы.

Ответы на вопрос(1)

Ваш ответ на вопрос