PDA

Visualizza la versione completa : [C] Memoria condivisa segmentation fault su struct


astolfo96
10-06-2018, 15:53
Salve a tutti sto provando ad usare la memoria condivisa tra processi perņ ancora prima di creare i processi sto riscontrando problemi nella modifica dei dati sulla struttura condivisa:



#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>

int s1;

struct segment{
int mtype;
char text[128];
};

int main(){
key_t key = ftok("password.txt",1);
if(key==-1){
printf("Error key\n");
exit(0);
}
s1 = shmget(key,sizeof(struct segment),IPC_CREAT);
if(s1==-1){
printf("Error s1\n");
exit(0);
}
struct segment* data = (struct segment*)shmat(s1, (void*)0, 0);

/*qui sulla prossima assegnazione mi da errore e penso sia dovuto
al fatto che sto puntando ad una zona di memoria della dimensione
della struttura ma che di fatto ancora non contiene una struttura dichiarata e
quindi non posso farlo perņ non so come condividere in memoria
una struttura dichiarata*/

data->mtype=1;

return 0;
}


Un'altra domanda č: "Se nel segmento s1 condivido una stringa ed una struttura, come faccio ad accedere ad entrambe avendo il puntatore alla zona di memoria e non rispettivamente un puntatore alla stringa ed uno alla struttura?

gprox
12-06-2018, 06:14
Se tu hai il puntatore di una shared memory di tipo struct X, nel momento in cui leggi lo devi castare e portarlo in una variabile ausiliaria di quel tipo (struct pointer X), e poi accedi alle sotto variabili.

Potresti creare un array e poi caricarlo in memoria e rileggerlo in un'altro processo senza problemi, non ti serve un indirizzo per ogni sotto variabile

Loading