|
|
|
![]() |
|
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 17: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 18: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: 16:37.