Я пытаюсь открыть канал 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);
}
Я не вижу трубы в папке вообще.
Для записи я получаю сообщение об ошибке НИКОГДА один из вариантов
Кто-нибудь имеет представление о том, почему?
Спасибо
O_APPEND может привести к повреждению файлов в файловых системах NFS, если несколько файлов одновременно добавляют данные в файл. Это связано с тем, что NFS не поддерживает добавление к файлу, поэтому ядро клиента должно имитировать его, что невозможно сделать без условия гонки.
Это может быть связано с этим, для более подробной информации смотрите ниже ссылку
http://www.kernel.org/doc/man-pages/online/pages/man2/open.2.html
Это ФИФО. Как это может сделать что-то еще, кроме добавления? Я считаю, что добавление является нормой, поэтому оно всегда будет добавляться независимо от того, как вы его открываете.