Как промыть трубу с помощью Bash - PullRequest
10 голосов
/ 28 июля 2010

У меня есть скрипт, который пишет в именованный канал, а другой - из канала. Иногда при запуске скрипта я замечал, что содержимое канала существует с предыдущего запуска скрипта. Есть ли способ очистить канал в начале скрипта?

Ответы [ 3 ]

9 голосов
/ 28 июля 2010

Я думаю dd твой друг:

dd if=myfifo iflag=nonblock of=/dev/null

страйк-шоу

open("myfifo", O_RDONLY|O_NONBLOCK)

и даже не блокирует пустое число.

1 голос
/ 29 июля 2010

Попробуйте это:

"Открытие FD для чтения / записи, а не только для чтения, при настройке конвейера предотвращает блокировку."

от

Настройка чтения конвейеров из именованных каналов без блокировки в bash

1 голос
/ 28 июля 2010

Вы можете читать из трубы, пока она не опустеет.Это эффективно очистит его.

Прежде чем пытаться совершить этот дерзкий подвиг, вызовите fcntl(mypipe, F_SETFL, O_NONBLOCK) (я не знаю эквивалент сценария оболочки), чтобы выполнить чтение, когда канал пуст, а не повесить вашу программу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...