|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
[C unix] lseek
Ciao a tutti.
Sto facendo una semplice prova con lseek per copiare un carattere alla volta il contenuto di un file in un altro. Ho il seguente codice: Codice:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int fd,n,len,fd2;
char c;
if(argc!=3)
{
printf("Errore di esecuzione! <./out> <nomefile1> <nomefile2>\n");
exit(-1);
}
fd=open(argv[1],O_RDONLY);
fd2=open(argv[2],O_WRONLY);
n=lseek(fd,0,SEEK_SET); //mi sposto all'inizio del file
printf("Sono all'inizio del file in posizione %d\n",n);
len=lseek(fd,0L,2);//mi calcolo la lunghezza del file
lseek(fd2,0,SEEK_SET);//mi sposto all'inizio del secondo file
printf("La fine del file a %d\n",len);
while(n<len) //fintanto che c'è da leggere
{
printf("n prima in while vale %d\n",n);
read(fd,&c,1);
write(fd2,&c,1);
//spostati di una posizione nel file--->ERRORE!
n=lseek(fd,0,SEEK_CUR);
//printf("n vale %d\n",n);
}
close(fd);
close(fd2);
exit(0);
}
Come faccio nel while a spostarmi di una posizione in avanti con lseek??
Grazie a priori!
|
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
devi spostarti avanti di un byte? e non va bene questo?
Codice:
lseek(fd, 1, SEEK_CUR); se ti restituisce errore dicci il valore di errno. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
In effetti qui non ti sposti proprio, torni dove sei già...
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
Così se la lunghezza del contenuto del file vale per esempio 13, l'istruzione lseek(fd,1,SEEK_CUR) va a 14, cioè si sposta di 1 ma rispetto alla fine...
|
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Non so che input tu stia ricevendo, ma non hai bisogno della lseek() dopo la read():
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Io eviterei lseek() e farei una cosa del genere:
Codice:
size_t uBytesRead = 0;
while (uBytesRead < uRequestedSize)
{
size_t uCount;
uCount = read(fd, &c, 1);
if (uCount <= 0)
{
break;
}
uBytesRead += uCount;
write(fd, &c, 1);
}
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:33.




















