2010-12-30 9 views
2

Ich betreibe eine Server-Anwendung (in Java geschrieben) unter GNU/Linux, die Eingabe (von stdin, nehme ich an) und interpretiere es, um einige Befehle auszuführen. Ich möchte die App nicht in einem Terminalfenster ausführen (ich möchte einen Daemon ausführen), aber ich möchte immer noch Befehle eingeben können, wann immer ich möchte. Ich dachte, ich könnte das mit Fifos machen, also habe ich es mit mknod erstellt. Das Problem ist Katze fifofile> java ... und cat fifofile | java ... fehlgeschlagen mit einem Fehler "Datei nicht gefunden" aus irgendeinem Grund.Umleiten von stdin durch einen FIFO

Mit nur Katze zu lesen und zu schreiben und der Fifo funktioniert einwandfrei.

Gibt es eine Möglichkeit, dies zu beheben, oder eine andere Möglichkeit, das gleiche Ziel zu erreichen?

Antwort

8

Also, Minecraft? Der beste Weg, dies zu tun, ist eine bona-fide Tty für die Konsole Teil der Anwendung zu haben. screen ist eine einfache Möglichkeit, das zu tun.

+0

Wow, habe nicht erwartet, dass irgendjemand Minecraft gerade aus dieser Beschreibung erkennt :) Danke für die Antwort, ich kann nicht glauben, dass ich nicht darüber nachgedacht habe! – kaoD

1

Haben Sie versucht java < fifofile? Was ist mit sowas wie exec 3<&0; exec 0<fifofile; java?

Welche Shell verwenden Sie? Sie können Prozesssubstitution oder Coprozessoren verwenden, wenn Sie eine Shell verwenden, die sie unterstützt.

+0

Das Problem mit einem benannten Fifo im Allgemeinen ist, dass der Kernel Paare von Lesern und Schreibern zusammenbringt. Wenn er 'java fifo', dann wird 'java' 'hallo' gefolgt von EOF angezeigt. Er würde noch einen weiteren beständigen Befehl brauchen, um die Eingangsseite des Fifos zu steuern, was ihn direkt dorthin zurückbringt, wo er angefangen hat. –

+0

Könnte _cat> fifo_ dann den Trick machen? Ich werde es versuchen, obwohl ich denke, dass das komplexer wird, als es sollte. – kaoD

+1

'cat> fifo' würde funktionieren ... * einmal *. So, jetzt ist dein Problem, was du mit der ausdauernden 'Katze' anstelle von' Java' anstellst. Außerdem wäre die Pufferung durch "Katze" wahrscheinlich nicht das, was Sie erwarten würden. –