fonsde Δημοσ. 28 Δεκεμβρίου 2009 Δημοσ. 28 Δεκεμβρίου 2009 πως θα βαλω την λιστα foo στο shared memory ? >#include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> typedef struct lista *ptr_listas; typedef struct lista { int grade; int courseid; ptr_listas next; } lista; int main(int argc, char **argv){ int id=0, err=0; int *mem; /* Make shared memroy segment */ id = shmget(IPC_PRIVATE,10,0666); if (id == -1) perror ("Creation"); else printf("Allocated. %d\n",(int)id); /* Attach the segment */ mem = (int *) shmat(id, (void*)0, 0); if ((int) mem == -1) perror("Attachment."); else printf("Attached. Mem contents %d\n",*mem); lista foo[5]; }
poscaman Δημοσ. 2 Ιανουαρίου 2010 Δημοσ. 2 Ιανουαρίου 2010 Το mem που έχεις φτιάξει είναι ένας δείκτης προς την αρχή της shared memory. Αυτόν μπορείς να το μετατρέψεις σε ότι είδους pointer θέλεις εσύ. Εσύ εδώ τον έχεις κάνει int. μπορείς να γράψεις το εξής mem = (lista *) shmat(id, (void*)0, 0); οπότε και ο pointer αυτός θα δείχνει σε έναν πίνακα από lista στην shared memory. άρα μπορείς να δώσεις το εξής *mem = foo[0];όπου πλέον στη SHM θα έχει περαστεί το στοιχείο foo[0]. Για να περάσεις ολόκληρη την foo[5] υπάρχουν 2-3 τρόποι, με τον πιο έξυπνο (κατά την γνώμη μου) να είναι η linked list. Επειδή στη SHM παίζουν πολλά πράγματα παράλληλα (processes,semaphores κλπ) είναι λίγο δύσκολο να σου πούμε με 2 λόγια πως θα περάσεις ολόκληρη τη foo[5] στην SHM. αν μας δώσεις περισσότερες info γενικά για το τί πας να κάνεις, τότε θα μπορέσουμε πιστεύω να βοηθήσουμε κατέβασε κι αυτό θα σε βοηθήσει πάρα πολύ.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.