Salve,
ho fatto la seguente funzione
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?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; } }

Rispondi quotando