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;}