2010-12-30 3 views
2

Je cours une application de serveur (écrite en Java) sous GNU/Linux qui prend l'entrée (de stdin, je suppose) et l'interprète pour exécuter quelques commandes. Je ne veux pas lancer l'application dans une fenêtre de terminal (je voudrais lancer un démon), mais j'aimerais quand même pouvoir entrer des commandes quand je le souhaite. J'ai pensé que je pourrais être capable de le faire en utilisant fifos, alors je l'ai créé en utilisant mknod. Le problème est chat fifofile> java ... et chat fifofile | java ... échoue avec une erreur "fichier non trouvé" pour une raison quelconque. En utilisant seulement cat pour lire et écrire et le fifo fonctionne parfaitement.Rediriger stdin à travers un FIFO

Y a-t-il un moyen de résoudre ce problème ou d'atteindre un autre objectif?

Répondre

8

Alors, Minecraft? La meilleure façon de le faire est d'avoir un tty de bonne foi pour la partie console de l'application. screen est un moyen facile de le faire.

+0

Wow, ne m'attendais pas à ce que quelqu'un reconnaisse Minecraft juste à partir de cette description :) Merci pour la réponse, je ne peux pas croire que je n'y ai pas pensé! – kaoD

1

Avez-vous essayé java < fifofile? Qu'en est-il de quelque chose comme exec 3<&0; exec 0<fifofile; java?

Quelle coque utilisez-vous? Vous pouvez utiliser la substitution de processus ou les coprocessus si vous utilisez un shell qui les prend en charge.

+0

Le problème avec un fifo nommé en général est que le noyau fait correspondre des paires de lecteurs et d'écrivains. S'il démarre 'java fifo' alors 'java' verra" bonjour "suivi de EOF. Il aurait encore besoin d'une autre commande persistante pour conduire le côté d'entrée du fifo qui le remettra à l'endroit où il a commencé. –

+0

Est-ce que _cat> fifo_ pourrait alors faire l'affaire? Je vais essayer, même si je pense que cela devient plus complexe qu'il ne le devrait. – kaoD

+1

'cat> fifo' fonctionnerait ... * une fois *. Alors maintenant, votre problème est de savoir quoi faire avec le 'cat' persistant au lieu de' java'. De plus, la mise en mémoire tampon par 'cat' ne serait probablement pas ce que vous attendez. –

Questions connexes