Προς το περιεχόμενο

shared memory


fonsde

Προτεινόμενες αναρτήσεις

Δημοσ.

πως θα βαλω την λιστα 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];

}

Δημοσ.

Το 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 γενικά για το τί πας να κάνεις, τότε θα μπορέσουμε πιστεύω να βοηθήσουμε

 

κατέβασε κι αυτό θα σε βοηθήσει πάρα πολύ.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...