Ho provato con il secondo metodo, e con un solo parametro non ci sono problemi, tutto va bene. Il problema è che devo passare tre long. Se modifico e aggiungo gli altri due parametri solo il primo arriva esatto, questo è il codice un pò modificato da me:
codice:
//id_ut,id_mes sono le mie variabili long
//u_cont è un int
//sono questi i parametri che devo passare
static char *argv[4] ;
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] = NULL;
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;
nel client le prendo con
codice:
unsigned long id_ut=malloc(sizeof(long));
unsigned long id_mes =malloc(sizeof(long));
unsigned int u_cont =malloc(sizeof(int));
id_mes=* ( ( unsigned long * ) argv[2] ) ;
id_ut=* ( ( unsigned long * ) argv[1] ) ;
u_cont=*( ( unsigned int * ) argv[3] ) ;
solo id_ut arriva esatta.
Che sbaglio?