ciao a tutti,
una volta ottenuto il pnt al primo elemento delle memoria condivisa come si accede alla mem condivisa da altri processi figli? mi è sembrato di capire che i puntatori non posso
condividerli fra processo padre e proc figlio, eppure mi sembrava l'unico modo giusto per accedere alla memoria
condivisa dai processi figli...ho fatto questo programma, chi saprebbe farmelo funzionare?
per vedere cosa c'è nella m.c:codice:#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <signal.h> #include <stdlib.h> #include <time.h> #include <sys/ipc.h> #include <sys/shm.h> #define SHMEM_KEY 1950 void parser(int argc,char *argv[]); main(int argc, char *argv[]) { //creo la shmem e faccio l'attach int shm_descr = shmget(SHMEM_KEY, sizeof(int) * 15, IPC_CREAT | 0600); int *msg = shmat(shm_descr, NULL, SHM_R | SHM_W); //puntatori a inizio e fine shmem int *msg_inizio = msg; int *msg_fine = msg + 14; //creo i clienti con delle fork int i,x, num_rich; for(i=0;i<5;i++){ x=fork(); if(!x) { break; } } //esecuzione dei processi figli if(!x) { int i; //costruzione degli elementi del msg da inserire int pid = getpid(); *msg = pid; printf("richiesta inserita: %d, numero memoria: %d\n", *msg, msg); msg++; //*msg++ = m; } }
così il risultato è che metto gli interi solo nella prima cella della m.c, mentre vorrei che gli interi fossero messi in successione..codice:#include <stdio.h> #include <unistd.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <stdlib.h> #include <stdio.h> #define SHMEM_KEY 1950 main(){ int shm_descr = shmget(SHMEM_KEY, sizeof(int) * 15, 0); int *msg = shmat(shm_descr, NULL, SHM_R | SHM_W); int i=0; for(i=0;i<15;i++){ printf("%d \n", *msg); msg++;} }

Rispondi quotando
