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?
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;
}
}
per vedere cosa c'è nella m.c:
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++;}
}
così il risultato è che metto gli interi solo nella prima cella della m.c, mentre vorrei che gli interi fossero messi in successione..