Открытие трубы в режиме добавления

Я пытаюсь открыть канал fifo, в который пишет один поток, синхронизация все хорошо.
Однако по понятным причинам мне нужно, чтобы он открывался в режиме добавления.

Когда я открываю его следующим образом:

        ret_val = mkfifo(lpipename.c_str(), 0666);
if((pipehandler = open(lpipename.c_str(), O_RDWR)) < 1)
{
perror("Failed to open pipe file");
syslog(LOG_ERR, "Failed to open pipe file");
exit(1);
}

У меня нет проблем, и я вижу трубку, помеченную желтым цветом, когда «ls-in-моей папки»

Но когда я пытаюсь открыть канал следующим образом, в режиме добавления:

    ret_val = mkfifo(lpipename.c_str(), 0666);
if((pipehandler = open(lpipename.c_str(), O_RDWR| O_APPEND)) < 1)
{
perror("Failed to open pipe file");
syslog(LOG_ERR, "Failed to open pipe file");
exit(1);
}

Я не вижу трубы в папке вообще.
Для записи я получаю сообщение об ошибке НИКОГДА один из вариантов
Кто-нибудь имеет представление о том, почему?

Спасибо

0

Решение

O_APPEND может привести к повреждению файлов в файловых системах NFS, если несколько файлов одновременно добавляют данные в файл. Это связано с тем, что NFS не поддерживает добавление к файлу, поэтому ядро ​​клиента должно имитировать его, что невозможно сделать без условия гонки.

Это может быть связано с этим, для более подробной информации смотрите ниже ссылку

http://www.kernel.org/doc/man-pages/online/pages/man2/open.2.html

0

Другие решения

Это ФИФО. Как это может сделать что-то еще, кроме добавления? Я считаю, что добавление является нормой, поэтому оно всегда будет добавляться независимо от того, как вы его открываете.

0

По вопросам рекламы [email protected]