questo è il thread che apre magari può aiutarvi a capire..
codice:
void *rubrica(void * connectsock)
{
/*prototipi di funzioni per il thread safety*/
ssize_t readn(int fd, void *buf, size_t n);
ssize_t writen(int fd, const void *buf, size_t n);
ssize_t readline(int fd, void *vptr, size_t maxlen);
struct elemrubrica app_elemrubrica;
/*prototipi di funzioni*/
void estrazione(int connectsock, FILE * fp, struct elemrubrica app);
void inserimento(int connectsock, FILE * fp, struct elemrubrica app);
int risp; /*conterrà il valore convertito in intero della
*risposta del client*/
int n;
ssize_t nread;
char buffer[MAXLINE]; /*buffer di lettura/scrittura*/
/*controllo sul detaching del thread*/
if((n = pthread_detach(pthread_self())) != 0)
{
errno = 0;
fprintf(stderr, "pthread_detach error");
exit(1);
}
FILE * fp;
/*controllo sull'apertura del file*/
if((fp=fopen("prova.txt","r"))==NULL)
{
fprintf(stderr, "error opening file");
exit(1);
}
do
{
/*lettura della scelta dell'operazione dal client*/
if((nread=readline((int)connectsock,(void *)buffer,MAXLINE)) == 0)
return; /* connessione chiusa dal client */
risp=atoi(buffer);
switch(risp)
{
case 1:
estrazione((int)connectsock, fp, app_elemrubrica);
break;
case 2:
inserimento((int)connectsock, fp, app_elemrubrica);
break;
case 0:
/*uscita*/
break;
default:
/*tutti gli altri casi*/
break;
}
}while(risp != 0);
fclose(fp);
}