2010-11-20 6 views
1

Ich habe ein Java-Programm in einer UNIX-Umgebung, die Zeile gepufferte Daten an System.in übergeben benötigt.Umleiten von zwischengespeicherten Daten in Programm von Datei im Gegensatz zu Block gepufferten Daten

Passing in Tastatureingabe vom Terminal ist in Ordnung, aber wenn ich versuche, die Eingabe aus einer Datei in einer Art und Weise, wie die Umleitung:

java the_program < input.txt 

das Programm ausführt nicht richtig.

In welcher Weise kann ich Zeilen gepuffert im Gegensatz zu Block gepufferten Daten in das Programm über Stdin übergeben?

Ich habe versucht:

stdbuf -oL cat input.txt | java the_program 

und

stdbuf -i0 java the_program < input.txt 

sowie

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

aber haben kein Glück gehabt.

Irgendwelche Ideen oder Vorschläge?

Antwort

0

Der größte Teil des Problems liegt im Java-Programm - warum/wie benötigt es die Eingabe, um zwischengespeichert zu werden? Es sollte so konzipiert sein, dass es das Analogon von C fgets() verwendet, so dass es nur eine Zeile nach der anderen liest. Wenn es kein solches Analogon gibt, müssen Sie vielleicht eine Funktion/Klasse schreiben, die diesen Service bereitstellt, was immer Sie lesen können, in welchen Einheiten auch immer, und entweder an Liniengrenzen teilen oder verketten.

dass Andernfalls können Sie in unportable Operationen wie mit dem fstat() Systemaufruf auf dem Rohr Dateideskriptors frönen müssen, nur auf das Rohr zu schreiben, wenn es keine Daten in es ist (am st_size Mitglied suchen). Es ist jedoch nicht garantiert, dass es funktioniert - unportabel bedeutet, dass es nicht funktioniert. Offensichtlich würden Sie sicherstellen, dass Ihr Programm jeweils eine Zeile schreibt und die Ausgabe bei Verwendung von Standard-I/O löscht.

+0

Ja, ich hätte klären sollen. Das Java-Programm ist so konzipiert, dass es bei nicht-gepufferten Zwischenspeichern fehlschlägt. Es sollte davon ausgegangen werden, dass "das_Programm" ein beliebiges Programm sein kann, das Standard-In akzeptiert. Ziel ist die Simulation von Benutzereingaben über die Tastatur, aber mit vordefinierten Tests in einer Textdatei . – Milo

Verwandte Themen