hei, ciao, spero mi possiate aiutare!
premetto che sono abbastanza alle prime armi.
devo fare un programma che prenda dalla linea di comando 2 numeri.
il processo padre deve creare un segmento di memoria condivisa e dare i due numeri a due processi figli, i quali calcoleranno il logaritmo del numero.
i risultati vengono poi sommati dal padre e stampati.
io per ora ho fatto cosi, ma non mi gira correttamente:
codice:#include <sys/types.h> #include <stdio.h> #include <unistd.h> #include <sys/stat.h> #include <sys/shm.h> #include <math.h> int main (int arcg, char *argv[]){ int segment_id; int* shared_memory; const int size=4096; pid_t pid; int m,n; int logn,logm; n=atoi( argv[1]); m= atoi(argv [2]); segment_id=shmget (IPC_PRIVATE, size, S_IRUSR|S_IWUSR); shared_memory=(int*) shmat(segment_id, NULL, 0); pid=fork(); if(pid<0){ fprintf( stderr, "fallito"); return 1;} else if (pid==0){ int logn= log(n); shared_memory[0]=logn; execlp ("/bin/ls","ls", NULL); } else if(pid>0){ wait(NULL); } pid=fork(); if(pid<0){ fprintf( stderr, "fallito"); return 1;} else if (pid==0){ int logm= log(m); shared_memory[1]=logn; execlp ("/bin/ls","ls", NULL);} else if(pid>0){ wait(NULL); shared_memory[2]= shared_memory[0]+shared_memory[1]; printf(" %d più %d uguale a %d", shared_memory[0], shared_memory[1], shared_memory[2]); shmctl(segment_id,IPC_RMID,0); } return 0;}

Rispondi quotando