Salve,
ho fatto la seguente funzione
codice:
int ricevi_file(int conn_fd,struct dati *data){
char messaggio[22]; ssize_t nread,nwritten; char dati_letti[1024]; size_t byte; char path[256]; int fd_trasf; int n;
//leggi messaggio esistenza file
if( (nread=read(conn_fd,&byte,sizeof(size_t))) < 0){
perror("read byte error");
exit(1);
}
if( (nread=read(conn_fd,messaggio,byte)) < 0){
perror("read error");
exit(1);
}
messaggio[nread]='\0';
//***************************************************************
printf("nread %d\n",nread); printf("messaggio %s\n",messaggio);
if( (n=strcmp("FILE TROVATO",messaggio)) == 0 ){
//leggi dimensioni del file
if( (nread=read(conn_fd,&byte,sizeof(off_t))) < 0){
perror("read() error");
exit(1);
}
sprintf(path,"%s%s",STORE_DIRECTORY,data->file_name);
//creo e apro file sul filesystem locale
if( (fd_trasf=open(path,O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR)) < 0){
perror("open() error");
exit(1);
}
//leggo file e lo memorizzo
while( (nread=read(conn_fd,dati_letti,byte)) > 0){
printf("nread %d\n",nread);
if( ( nwritten=write(fd_trasf,dati_letti,nread)) != nread ){
perror("nwrite() error");
exit(1);
}
}
if( nread < 0 ){
perror("read() error");
exit(1);
}
return 1; }
else{
printf("file inesistente\n");
return 0; }
}
Questa funzione se trova il file lo trasferisce attraverso un socket conn_fd e lo memorizza in fd_trasf.Il problema,la funzione non ritorna, sorge nella funzione write evidenziato in rosso.Cosa sbaglio?