Come reindirizzare i dati nel buffer di linea in programma dal file invece di bloccare i dati nel buffer
-
26-09-2019 - |
Domanda
Ho un programma Java in un ambiente UNIX che richiede dati di linea tamponato per essere passato in System.in.
Passando input di tastiera dal terminale è soddisfacente, se si tenta di reindirizzare l'input da un file in modo tale da:
java the_program < input.txt
il programma non verrà eseguito correttamente.
In che modo posso avere la linea tamponato al contrario di bloccare i dati nel buffer essere passati al programma tramite stdin?
ho provato:
stdbuf -oL cat input.txt | java the_program
e
stdbuf -i0 java the_program < input.txt
così come
grep --line-buffered . input.txt | java the_program
, ma non hanno avuto fortuna.
Tutte le idee o suggerimenti?
Soluzione
La maggior parte del problema è nel programma Java - perché / come ne ha bisogno l'ingresso da line-buffer? Deve essere stato progettato per utilizzare l'analogo di fgets()
di C in modo che solo legge una riga alla volta. Se non c'è tale analogico, allora forse avete bisogno di scrivere una funzione / classe che fornisce tale servizio, l'assunzione di qualunque cosa si può leggere in qualsiasi unità sono forniti, e sia divisa o concatenare all'ultima riga.
In mancanza di questo, potrebbe essere necessario indulgere in operazioni portabili come usando la chiamata di sistema fstat()
sul descrittore di file pipe, la sola scrittura al tubo quando non ci sono dati in esso (guardando il membro st_size
). Tuttavia, non è garantito che funzioni - mezzi portabili non può. Ovviamente, si potrebbe assicurare il vostro programma scrive una riga alla volta e vampate l'uscita se si utilizza standard di I / O.