1

Я пытаюсь использовать именованные каналы в качестве удобного способа предварительной обработки ввода на лету для конвейеров, которые, к сожалению, не принимают данные из stdin напрямую.

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

Суть в основном в том, что должно работать следующее:

mkfifo mynamedpipe echo "is this working?" > mynamedpipe cat mynamedpipe

когда я запускаю mkfifo mynamedpipe , канал успешно создается и отображается с помощью ls * .

Но даже после того, как я даю себе разрешение на запись в этот канал, когда я пытаюсь запустить echo "whatever" > mynamedpipe ничего не происходит, и терминал просто зависает, пока я не завершу процесс с помощью ctrl+c

У меня есть эта проблема на моей локальной машине с Linux (Ubuntu 14.04.5 LTS), а также на общедоступном сервере (Red Hat Enterprise Linux 7) и в zsh, а также в bash.

Что я здесь не так делаю?

1 ответ1

1

Этот пост, похоже, относится к вашей проблеме:Cat to named pipe приводит к зависанию.

Соответствующие замечания:

  • Вам нужно что-то читать из ФИФО
  • Убедитесь, что канал создан с достаточно большим буфером или считыватели достаточно быстрые, чтобы избежать блокировки
  • Вам необходимо назначить канал дескриптору файла, как в:

    exec 3<>/tmp/stream_pipe
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .