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

Я пытаюсь открыть канал 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);
    }

У меня нет проблем, и я вижу трубу, помеченную желтым цветом, когда я вижу свою папку

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

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

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

Спасибо

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам