LinuxForum.Fans
Тема

Помогите "раздать" данные на две программы

Автор: Quiz 7 сообщений 869 просмотров
#364145

Приветствую!
Ломаю голову над решением следующей задачи. Имеется программа, которая генерирует некие данные и умеет писать их либо в файл, либо в stdout. Программа может быть запущена только в одном экземпляре. Необходимо иметь возможность непрерывно писать эти данные в файл, плюс при необходимости раздавать эти данные через запущенный сервер netcat (при подключении клиента). Причем раздавать не все уже записанные в файл данные, а только те, что сгенерированы с момента подключения, то есть самые актуальные на данный момент.

В общем-то первое, что пришло на ум - писать stdout в файл и одновременно в pipe, используя tee. А этот самый пайп "скармливать" netcat-серверу. Однако если немного подумать, то получается, что при отсутствии клиента пайп моментально забьется и будет ждать, пока данные не заберут. Может быть можно как-то реализовать "плавающий" пайп, который не переполняется и в буфере которого будут только последние актуальные данные? Сильно за идею не пинайте, в юникс-системах я не силен :)

Вопрос именно общий, хотелось бы понять сам принцип решения такой задачи. Если нужна конкретика - то мучаю ее на системе wheezy-raspbian (2014-01-07), Kernel 3.10

#364166

альтернатива pipe- unix socket. более универсален. может быть nonblocking . а идеология запрос- ответ
я подобное делал еще через udp-socket типа сетевое радио- кто подключился тот и слышит

#366065

Возможно ли "напрограммирвать" unix socket через bash?
Если не сложно, тыкните в примеры таких реализаций, ничего толкового не нашел. Спасибо!

#366071

Самое близкое решение нашел тут http://stackoverflow.com/questions/7360473/linux-non-blocking-fifo-on-demand-logging (второй ответ).
Однако читать fifo в данном случае может только один процесс. А мне нужно получить некий буфер, который просто "сливает" данные вникуда, пока никто не подключился. А когда процесс подключается - он получает все эти данные. Этакий локальный broadcast-раздатчик :)

#366105

почитайте стивенса разработка сетевых приложений и взаимодействие процессов в unix . классика жанра и расписано хорошо

#366127

http://www.lainoox.com/bash-socket-programming/
чтото вроде:

text
while read line
do 
echo $line > /dev/udp/host/port
echo $line >> logfile
done

udp не проверяет соединение просто транслирует вход на выход

Войдите или зарегистрируйтесь, чтобы ответить.