PDA

View Full Version : [C-UNIX]come funziona lseek?


MEMon
14-03-2007, 17:45
Sto facendo un banalissimo esercizio, ma sembra che non funzioni lseek...


for(i=1;i<argc;i++){
pfile=open(argv[i],O_RDONLY);
lseek(pfile,0L,2);
nr=read(pfile,&ch,1);
if(nr) write(1,&ch,nr);
}


argv sono percorsi relativi di file.
Mi stampa sempre il primo carattere di ogni file, e non l'ultimo come vorrei, in pratica sembra che lseek non sposti il "cursore" nel file, dove sbaglio?

MEMon
14-03-2007, 17:55
ho visto ke lseek restituisce -1 quindi immagino vada in errore...per quali motivi può andare in errore?

beppegrillo
14-03-2007, 17:58
non sono sicuro ma se fai
lseek(fd,-2,sek_end)
ed ammesso che il char sia 2 byte, dovrebbe spostarsi alla fine del file, prima dell'ultimo carattere.

beppegrillo
14-03-2007, 17:59
ho visto ke lseek restituisce -1 quindi immagino vada in errore...per quali motivi può andare in errore?

intanto direi di controllarti se il file viene aperto effetivamente.
In più puoi usare perror per scoprire di che errore si tratta.

MEMon
14-03-2007, 18:06
il file viene aperto, in quanto riesco anche a leggerne i caratteri.
Ho provato anche con SEEK_END ma mi da sempre -1.
Come si usa perror?

MEMon
14-03-2007, 18:07
Capito come si usa perror, mi da invalid argument...

beppegrillo
14-03-2007, 18:21
Capito come si usa perror, mi da invalid argument...

forse perchè gli passi 0L?
Metti 0, e per prova puoi usare pure seek_cur :)

MEMon
14-03-2007, 18:23
Nulla da fare...potrebbe essere che sto usando cygwin e non sono veramente in ambiente unix?
Però è strano...invalid argument è un errore ben preciso, e a me sembra di averglieli passati bene gli argomenti.

MEMon
14-03-2007, 19:43
Nessun'altra idea?