Come reindirizzare i dati nel buffer di linea in programma dal file invece di bloccare i dati nel buffer

StackOverflow https://stackoverflow.com/questions/4230595

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top