Francamente non mi sembra... il fatto è che crea il file senza dare errori, ma poi scrive a terminale e lascia il file vuoto... ecco il frammento di codice:

{
bzero (&buf, sizeof(buf)); /* Reset di buf */
leggi_dati(socket_connessioni[i], buf, 50); /* Lettuta del nome del */
/* file inviato dal client */
/* Composizione del percorso del nuovo file */
bzero (&path, sizeof(path)); /* Reset di path */
strcat (path, directory);
strcat (path, "/");
strcat (path, buf);

/* Creazione del nuovo file: se questo già esiste, si comunica "File*/
/* esistente" e si esce (idem nel caso di altri errori) */
if (pf=open (path, O_RDWR | O_CREAT, S_IRWXU)<0)
{
if (errno==EEXIST)
printf ("\n File esistente\n");
else perror (" Errore creazione file ");
printf (" Inserire un carattere per terminare: ");
scanf ("%d", &temp);
exit (-1);
}

/* Ricezione contenuto del file dal client e scrittura nel file: */
/* vengono letti dal socket, scritti in buf ed inviati al file, max */
/* 300 byte per volta */
printf ("\n Ricezione dati file dal client\n");
bzero (&buf, sizeof(buf)); /* Reset di buf */
letti=leggi_dati (socket_connessioni[i], buf, 300);
/* Ciclo che continua finchè vengono letti ancora caratteri */
while (letti>0)
{
scrivi_dati(pf, buf, 300); /* Scrittura nel buffer */
bzero (&buf, sizeof(buf)); /* Reset di buf */
letti=leggi_dati (socket_connessioni[i], buf, 300);
}
close(pf); /* Chiusura del file descriptor */
close(socket_connessioni[i]); /* Chiusura del socket del server */
printf (" Scrittura del file eseguita. Premere per continuare: \n");
scanf ("%d", &temp);
}