Я видел много вещей о перенаправлении stdout в TCP-сокет, но нет реального примера того, как это сделать на практике, особенно когда поток вывода, генерируемый первой «командой», никогда не заканчивается.
Чтобы поговорить о чем-то конкретном, давайте возьмем такие программы, как серверы, которые обычно бесконечно выводят свой журнал на стандартный вывод (ну, пока они работают). Если вы перенаправляете вывод в файл журнала на диске, то этот файл всегда открыт (поэтому не может быть прочитан другими?) И растет бесконечно, что в конечном итоге приведет к проблемам.
Это может быть хороший вопрос, но я не знаю, что он делает или как это сделать.
Заранее спасибо
На стороне приемника откройте гнездо для прослушивания:
nc -l 1234
где 1234
- номер порта для прослушивания. По умолчанию netcat использует TCP-сокет. Это будет работать непрерывно, пока не получит EOF. Если вам нужно отключить это, добавьте опцию -q -1
(отрицательный тайм-аут ожидания - см. Man-страницу).
При желании перенаправьте вывод в файл или передайте его по конвейеру, например:
nc -l 1234 > mylogfile.log
На стороне отправителя запустите команду и направьте stdout к netcat:
]mycommand | nc 123.45.67.89 1234
где 123.45.67.89
- IP-адрес прослушивающей стороны, а 1234
- номер порта.
Это будет выполняться непрерывно (потоковая передача данных), пока mycommand
не выведет EOF.
Как перенаправить вывод команды во внутренний цикл?
blockquote>Я не уверен, что вы имеете в виду «внутренним циклом», но перенаправление вывода - очень общий вопрос для вашей оболочки.
Я хочу убедиться, что данные отправляются КАЖДЫЙ раз, когда что-то записывается на стандартный вывод, и что канал не будет ждать завершения команды (в идеале никогда не происходит!). Это верно?
blockquote>Каналы в оболочке не будут ждать EOF для передачи данных, насколько я знаю.
Если 2 имеет значение true, существует ли буферная система для отправки фрагментов данных, только когда они достигают только определенного размера?
blockquote>Да, общие буферы в каналах, как описано в предложение ignis в его комментарий : Вопрос по UL: отключить буферизацию в трубе .
TCP будет обрабатывать буферы на уровне TCP.