LINUX.ORG.RU

[bash] pipe (FIFO) non blocking чтение/запись на баше

 


0

1

Мне нужно обмениваться между скриптами через пайп-файл (FIFO).

Один скрипт читает из пайп-файла.

Другой скрипт пишет в пайп-файл.

Но первый скрпит может иногда долгое время не читать из пайп-файла.

И из-за этого второй пишущий скрипт подвисает ожидая первый скрипт.

Так же первый скрипт может зависнуть из-за отсутствия данных от второго скрипта.

Нужно прекратить попытки чтения/записи с пайп-файлом по истечении например десяти секунд.

Я же конечно могу написать программы на Си которые будут читать/писать пайп-файл в не блокирующем режиме, но не хотелось бы изобретать велосипед.

Команда чтения : READ_STRING=`cat some.pipe`

Команда записи : echo ${WRITE_STRING} > some.pipe



Последнее исправление: someloruser (всего исправлений: 4)

В чем проблема? Открывай пайп на запись с O_NONBLOCK. Если пайп не открыт на чтение, open() вернет EAGAIN. Ловишь его, пытаешься писать снова.

Только сдается мне, что задача плохо поставлена и все эти костыли при правильной постановке просто не нужны.

unanimous ★★★★★
()
Ответ на: комментарий от unanimous

Я на баше хотел сделать без создания Си-програм.

someloruser
() автор топика

Нужно прекратить попытки чтения/записи с пайп-файлом по истечении например десяти секунд.

у read есть -t timeout

vga ★★
()

> Нужно прекратить попытки чтения/записи с пайп-файлом по истечении например десяти секунд.

read -t 10

ananas ★★★★★
()
Ответ на: комментарий от vga

read -t timeout - это то что нужно.

А команду записи как сделать с таймаутом ?

echo ${WRITE_STRING} > some.pipe

someloruser
() автор топика
Ответ на: комментарий от someloruser

используй редирект. нечто типа

#! /bin/bash
mkfifo fifo
exec 3<>fifo
echo test >&3
ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.