|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
[C] tips & tricks della read()
Ciao a tutti...
avrei bisogno di un vostro aiuto... dovrei leggere alcuni numeri da un file formattato in questa maniera: Codice:
0 1 2 io ho messo un'istruzione: Codice:
while(read(fd, buf, SIZE) > 0) etc..etc.. Il fatto è che non funziona... legge solamente il primo numero, poi non torna più caratteri e il programma termina perchè su quella linea non c'è più niente... come posso "farla andare a capo"?? (sono riuscito a spiegarmi?) grazie, e buona Pasqua!
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" Ultima modifica di Gandalf_BD : 08-04-2007 alle 18:46. Motivo: Mancavano gli auguri!!! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non credo sia quello il problema...alla read non importa assolutamente niente che tu sia arrivato in fondo alla riga....
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
però, durante il debug, ho visto che il problema è su quell'istruzione... l'unico motivo di terminare il while è che la read torni 0... no?
![]() EDIT: aspetta... effettivamente, la read legge subito 19 caratteri (che potrebbe essere tutto il file, visto che ci sono circa 5 righe...) e poi più niente... quindi il problema è che non si ferma a fine riga... c'è un modo di farglelo fare, oppure è troppo a basso livello? grazie ancora
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" Ultima modifica di Gandalf_BD : 08-04-2007 alle 19:19. Motivo: ulteriori prove... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La read non si ferma a fine riga...l'unico modo per farlo (se vuoi sempre usare read) è leggere un carattere alla volta...quindi imposti SIZE a 1 e ti fermi quando leggi il carattere di fine linea.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
Se fai una lettura con read() ed utilizzi una SIZE di 1 byte devi tener conto che da quel file leggi anche i carattiri CR ed LF (se sei in ambiente MS-DOS/Windows) o LF (se sei in ambiente UNIX).
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
grazie
quindi l'unico modo per farlo con la read() è leggere un byte alla volta...
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
Quote:
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
e se facessi una sscanf() sul buffer letto dalla read()?
lo so che è contorto, ma è giusto per curiosità funzionerebbe, no? sarebbe l'equivalente di una fscanf(), giusto?
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
La sscanf() a differenza della fascanf() non agisce su un buffer generico, come penseresti di usarla?
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
ma io quello che legge la read() lo immagazzino in un buffer di tipo char [SIZE]...
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:48.





















