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