Перенаправление стандартного ввода через FIFO

Я запускаю серверное приложение (написанное на Java) под GNU/Linux, которое принимает входные данные (наверное, из стандартного ввода) и интерпретирует их для запуска некоторых команд. Я не хочу запускать приложение в окне терминала (я бы хотел запустить демон), но я все же хотел бы иметь возможность вводить команды, когда захочу. Я подумал, что смогу сделать это с помощью fifos, поэтому создал его с помощью mknod. Проблема заключается в cat fifofile > java... и cat fifofile | java ... по какой-то причине завершается ошибкой "файл не найден".

Использование только кота для чтения и записи, и fifo работает безупречно.

Есть ли способ исправить это или любой другой способ достичь той же цели?


person kaoD    schedule 30.12.2010    source источник


Ответы (2)


Итак, Майнкрафт? Лучший способ сделать это — иметь добросовестный tty для консольной части приложения. экран — это простой способ сделать это.

person Ben Jackson    schedule 30.12.2010
comment
Ничего себе, не ожидал, что кто-то узнает Minecraft только по этому описанию :) Спасибо за ответ, я не могу поверить, что не думал об этом! - person kaoD; 30.12.2010

Вы пробовали java < fifofile? Как насчет чего-то вроде exec 3<&0; exec 0<fifofile; java?

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

person Dennis Williamson    schedule 30.12.2010
comment
Проблема с именованным fifo вообще заключается в том, что ядро ​​сопоставляет пары читателей и записывающих устройств. Если он запустит java < fifo, а затем echo hello > fifo, то java увидит приветствие, за которым следует EOF. Ему понадобится еще одна постоянная команда, чтобы управлять входной стороной fifo, которая вернет его туда, откуда он начал. - person Ben Jackson; 30.12.2010
comment
Может ли тогда cat › fifo помочь? Я попытаюсь, хотя я думаю, что это становится более сложным, чем должно. - person kaoD; 30.12.2010
comment
cat > fifo сработает... однажды. Итак, теперь ваша проблема заключается в том, что делать с постоянным cat вместо java. Кроме того, буферизация через cat, вероятно, будет не такой, как вы ожидаете. - person Ben Jackson; 30.12.2010