codice:
//Variabili globali
long id_ut,id_mes;
int u_cont;
int main(int argc, char *argv[]){
key_mes=17;
key_ut=89;
......
/*** Qui faccio assegnazioni ***/
//Creo memoria condivisa per utenti e messaggi
//Messaggi
id_mes=shmget(key_mes,1024,IPC_CREAT|0666);
//Utenti
id_ut=shmget(key_ut,1024,IPC_CREAT|0666);
if(id_mes ==-1){
printf("Errore nella creazione della memoria condivisa per i messaggi.\n");
exit(0);
}
if(id_ut ==-1){
printf("Errore nella creazione della memoria condivisa per gli utenti.\n");
exit(0);
}
......
//Visualizzo il menu
sMenu();
}
//Il menu da varie opzioni tra le quali il login
//Nel login faccio la fork exec;
void loggaUtente(){
static char *argv[5] ;
static char arg0[] = "a.out";
unsigned long *address=malloc(sizeof(long));
*address =id_ut;
unsigned long *addressb=malloc(sizeof(long));
*addressb=id_mes;
unsigned int *addressc=malloc(sizeof(int));
*addressc=u_cont;
pid_t pid=fork();
switch(pid){
case 0:
/* Questo e' il processo figlio */
argv[0] = arg0;
argv[1] = ( char * ) address;
argv[2] = ( char * ) addressb;
argv[3] = ( char * ) addressc;
argv[4] = 0;
execv( "../Client/a.out", argv);
/*
* Se il controllo e' giunto qui allora si e' verificato
* un errore nella chiamata execv().
*/
fprintf( stderr, "%s: execv()\n", strerror(errno) );
break;
case -1:
/* La chiamata fork() e' fallita */
fprintf( stderr, "%s: La fork ha fallito\n", strerror(errno));
exit ( EXIT_FAILURE );
break;
}
}
Se serve altro....grazie in anticipo per l'aiuto