Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    residenza
    matrix
    Messaggi
    56

    [C] Memoria condivisa segmentation fault su struct

    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:

    codice:
    #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?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.