Ragazzi ciao a tutti ho un problema non riesco a capire come mai la execv non
funziona, potreste darmi una mano? il codice di gestione di processi unix funziona tutto correttamente ma la execv non parte.....
codice:#include <sys/types.h> #include <sys/wait.h> #include <string.h> #include <stdlib.h> #include <stdio.h> int main(int argc,char *argv[]) { int status,i,pid,t,value; int vett[argc-1]; int v=0; char h[64]; if(argc < 4 || argc > 11) { printf("errore numero argomenti\n"); exit(-1); } for(i=1;i<argc;i++) { if((strtol(argv[i],NULL,0))<1 || ((strtol(argv[i],NULL,0))>4)) {printf("valore argomenti errato\n"); exit(-2);} } for(i=1;i<argc;i++) { vett[v]=strtol(argv[i],NULL,0); v++; } argc--; for(i=0;i<argc;i++) { if((pid=fork())==0) { srand(time(NULL)); t = rand() % 5 + 1; sleep(t); printf("Sono il processo figlio %d ho aspettato %d secondi e termino\n",getpid(),t); exit(vett[i]);} } for(i=0;i<argc;i++) { wait(&status); value=WEXITSTATUS(status)-1; vett[i]=value; } for(i=0;i<argc;i++) { while(vett[i]>=0) { if(vett[i]>0) { pid=fork(); if(pid==-1) {perror("errore fork "); exit(-1);} if(pid==0) {srand(time(NULL)); t = rand() % 5 + 1; sleep(t); printf("Sono il processo figlio %d ho aspettato %d secondi e termino\n",getpid(),t); exit(0);} } if(vett[i]==0) { pid=fork(); if(pid==-1) {perror("errore fork "); exit(-1);} if(pid==0) { sprintf(h,"Il processo figlio %d è terminato",getpid()); execv("usr/bin/xmessage",h); exit(-1); } } wait(&status); --vett[i]; } } printf("Sono il padre %d e termino perchè non è possibile creare altri processi\nin quanto il valore degli argomenti è: \n",getpid()); for(i=0;i<argc;i++) printf("%d ",vett[i]); printf("\ne tutti i figli sono terminati\n"); return 0; }

Rispondi quotando