Как перенаправить линию буферизованных данных в программу из файла в отличие от блокировки буферизованных данных

StackOverflow https://stackoverflow.com/questions/4230595

Вопрос

У меня есть программа Java в среде Unix, которая требует переданных линейных данных, которые будут передаваться в System.in.

Прохождение в входе клавиатуры из терминала в порядке, однако, если я пытаюсь перенаправить вход из файла таким образом, как:

java the_program < input.txt

Программа не будет выполнена должным образом.

Каким образом я могу иметь буферизацию линии, в отличие от блокировки буферизованных данных передаваться в программу через stdin?

Я пытался:

stdbuf -oL cat input.txt | java the_program

и

stdbuf -i0 java the_program < input.txt

также как и

grep --line-buffered . input.txt | java the_program

Но не повезло.

Любые идеи или предложения?

Это было полезно?

Решение

Большая часть проблемы находится в программе Java - почему / Как вам нужен вход для буферизации линий? Это должно быть разработано для использования аналога C fgets() Так что это просто читает строку за раз. Если такого аналога нет, то, возможно, вам нужно написать функцию / класс, который предоставляет этот сервис, принимая все возможное, в любых подразделениях предоставляются и разделите или объединяются на границах строк.

Не удалось, что вам, возможно, придется побаловать себя в неотложных операциях, таких как использование fstat() Системный вызов на дескриптор файла трубы, пишу только в трубу, когда в нем нет данных (смотрит на st_size член). Тем не менее, не гарантируется, что он будет работать - неотъемлемо означает, что он не может. Очевидно, вы бы гарантируете, что ваша программа записывает строку и размывает вывод при использовании стандартного ввода / вывода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top