Newsgroup: it.comp.java
Titolo: Leggere un "device" con Java...

Ciao a tutti,
per un lavoro per l'universita', sto cercando di fare un applet che
legga dei dati da un particolare device e che li elabori, disegnando un
grafico con quello che si e' letto...
Mi trovo pero' con il problema della lettura di un device: ragionando
(forse abbastanza alla leggera :)) che "Sotto Linux, tutto e' file", al
momento ho provato a usare un normale
 BufferedReader filebuf = new BufferedReader(new
FileReader(fileLocation));
Tuttavia, sia con applicazione standalone (prima di fare l'applet ho
provato a fare una piccola applicazione per provare appunto la lettura)
sia con l'applet si verificano dei "strani problemi":
--Le prime righe vengono lette correttamente, poi (nello standalone) mi
stampa dei strani caratteri prima delle stringhe con i dati (che per il
resto, son corretti: su quel device scrivo delle stringhe con un file
c, e con un altro si possono leggere normalmente), mentre nella applet
(stampo in una TextArea) scrive delle linee vuote
Questo primo problema l'ho risolto in realta' anticipando un header ai
dati che scrivo con il file c, e che quindi rimuovo insieme a quei dati
"strani"...dopo di che stampa bene il resto...o quasi
--Infatti un file /dev non e' un regular file (lo dice anche Linux ;)),
e quindi succedono cose strane:
---Il programma resta costantemente in ascolto, ovvero sembra che sullo
stream ci sia sempre qualcosa da leggere (anche se non lo
stampa)...quando faccio partire il programma che scrive sul device, i
dati son riportati, ma quando il programma finisce di scrivere sul
device, l'applicazione (standalone e applet) non termina, ma resta in
ascolto (tanto che, se rilancio l'applicazione che scrive i dati sul
device, applet e standalone riprendono a stampare l'output...)
---Per ovviare a questo problema, ho provato ad indicare un numero
massimo di dati da leggere...
while ((nextStr != null) && (stop < quantiDati))
{
...
stop++;
}
in questo caso, le applicazioni terminano, ma nel caso dell'applet
(devo provare con lo standalone) stranamente ogni tanto termina PRIMA
che abbia letto tutti i dati richiesti O_O...E non sempre (rifacendo
andare il programma, ogni tanto legge tutti i dati richiesti)
Dunque...secondo me il problema, e' proprio come apro il
file...suggerimenti? Come dovrei fare?
Grazie a tutti :)
Daniele

Un po' di chiarimenti:
1) Dire che l'applicazione non ha terminato e che il ciclo while non ha
terminato non è lastessa cosa. Ossia, se anche la chiamata della tua
applicazione è in un ciclo while(true), ovviamente resta in ascolto.
2) Nel tuo ciclo while non vedo l'istruzione nextStr =
fileBuf.readLine();
Ovviamente c'è, vero?
3) Il file che leggi è puro ASCII? Io lo aprirei con un prodotto tipo
UltraEdit per vedere cosa c'è effettivamente dentro...

 writes:
L> Dunque...secondo me il problema, e' proprio come apro il
L> file...suggerimenti? Come dovrei fare?  Grazie a tutti :)
Domandina, il device è un character device o un buffer device ?
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione

 writes:
p> 3) Il file che leggi è puro ASCII? Io lo aprirei con un prodotto
p> tipo UltraEdit per vedere cosa c'è effettivamente dentro...
Ahem il file è un device, non un file (no, non lo riesci ad aprire con
un editor) e  comunque non occorre un editor  (almeno sotto Linux) per
avere il dump esadecimale o ottale.


Ciao a tutti :)
Allora:
-- sí, ovviamente c'era la riga di lettura della stringa nel codice
;).
--Per dire che non ha terminato...semplicemente dopo il ciclo while non
c'é nulla, e mentre una lettura normale da file (dopo il ciclo while
chiudo il bufferedreader e basta...nada...) mi restituisce il controllo
della shell, questo no
--Uhm...ecco, a che tipo di device sia, non so rispondere ma provo ad
informarmi :) (c'é un modo di interrogare un device per sapere di che
tipo é?)...non so se conoscete RTAI - Linux o cose del genere, ma per
l'esattezza si tratta del device /dev/rtf1 (una cosa che immagino possa
sembrare molto contorta: si scrive su un device di nome /dev/comedi0 e
si legge appunto da questo device /dev/rtf1)
Grazie delle risposte, ora provo a cercare che tipo di device é...
LastHope

Ciao a tutti,
dopo un po' di search con Google ho trovato questo:
http://www.isd.mel.nist.gov/projects/rtlinux/rtutorial/doc/ex04_fifo.htm
dove c'é scritto che i /dev/rtf* sono dei character devices...cambia
qualcosa quindi?
Ciao e ancora grazie a tutti
Daniele

Ciao a tutti,
scusatemi per l'insistenza, ma sto provando a cercare delle soluzioni
alternative...vorrei chiedervi:
--Potrebbe trattarsi benissimo di un problema di encoding...qualche
idea su come potrei risalire all'encoding corretto di un device?
--rtf sta per RTAI Fifo, ovvero una coda...forse potrei provare con un
altro stream più adatto per queste strutture? Qualche idea?
Ciao e grazie a tutti :)
Daniele