Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C] Memoria Condivisa

  1. #1

    [C] Memoria Condivisa

    Ciao a tutti , sto lavorando con una memoria condivisa tra due processi, ora vi pongo il problema nel migliore dei modi..cosi sentiamo i vostri pareri

    ho messo in memoria condivisa una lista utenti e le
    tre oggetti di tipo matrix_X in segmenti di memoria diversi(con key diversa).
    Es:
    Chiave mem.cond per Lista= 15
    Chiave mem.cond per Matr_A= 16
    Chiave mem.cond per Matr_D= 17
    Chiave mem.cond per Matr_M= 18

    L'oggetto matrice è cosi composto:

    typedef struct mA{
    int nRow;
    int nCol;
    char giorni_mese[100][10];
    user* utenti_disp[100][100];
    int sommaTotale[100];
    }matrix_X;

    mentre l'oggetto di tipo user è cosi composto:

    typedef struct user_data{
    char nome_cognome[30];
    char gruppo[4];
    char giorni_disp[100][10];
    int totDisp;
    int last;
    int totTurni;
    }user;

    All'interno delle matirci Mat_A vanno gli user di gruppo A, in quella di tipo M gli user di gruppo M e cosi via.
    Nel creare le matrici ho copiato i puntatori agli oggetti di tipo user presenti nella lista utenti nella matrice corrispondente.

    Quando mi trovo a dover leggere tali dati da un processo esterno, eseguo l'attach al segmento di memoria condivisa della lista e riesco a leggere correttamente.
    Mentre quando cerco di accedere ai dati utente(user) partendo dalla matrice, non riesco in nessun modo ad accedervi (penso per il fatto che sia in una zona di memoria condivisa diversa).

    Come posso fare per riuscire ad accedere ai dati utente partendo dalla lista, lasciando tutto in memoria condivisa?

    Grazie a tutti in anticipo

    Ciao,

    Davide

  2. #2
    Le strutture di tipo User sono negli stessi blocchi di memoria mappata delle relative matrici? In tal caso memorizza i riferimenti ad essi come offset relativi all'oggetto matrice invece che come puntatore.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Originariamente inviato da MItaly
    Le strutture di tipo User sono negli stessi blocchi di memoria mappata delle relative matrici? In tal caso memorizza i riferimenti ad essi come offset relativi all'oggetto matrice invece che come puntatore.
    mm...allora, diciamo che la lista di tipo User è quella da cui leggo per poi mettere i riferimenti nelle matrici.
    Ovvero,

    scorrendo la lista (che in fine è un vettore di tipo user), vado a mettere dentro all'oggetto di tipo matrix_X (piu precisamente nella matrice di puntatori di tipo user) l'indirizzo relativo all'oggetto nella lista.
    Es:

    matrix_a.utenti_disp[rr][cc]=&lista[indice];


    spero di essermi espresso meglio:-)


    Ciao

    Davide

  4. #4
    Il problema è che nell'array matrix_a.utenti_disp vai a mettere puntatori che negli altri processi non sono validi, visto che la memoria è mappata ad un altro indirizzo. Per risolvere dovresti assicurarti che lista si trovi nello stesso blocco di memoria mappata dei vari matrix_lettera, e quindi, invece di memorizzare dei puntatori (che negli altri processi non sono validi) memorizzare degli offset relativi all'inizio del blocco di memoria.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Perfetto , capito:-) e per ora sembra pure funzionare:-)


    Grazie mille!!!

  6. #6
    Di niente, ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [C] Memoria Condivisa

    Originariamente inviato da devil_evoxxx
    .
    piccolo ot Fammi indovinare, terzo elaborato di Laboratorio di Sistemi Operativi? In bocca al lupo
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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 © 2025 vBulletin Solutions, Inc. All rights reserved.