Ho uno struct:Come modificare la memoria condivisa (shmget/shmat) in C?
struct sdata {
int x;
int y;
time_t time;
};
creo memoria condivisa per la struct come segue:
size_t shmsize = sizeof(struct sdata);
shmid = shmget(IPC_PRIVATE, shmsize, IPC_CREAT | 0666);
Poi ho accedere alla memoria condivisa in questo modo:
struct sdata *data = shmat(shared.shmid, (void *) 0, 0);
data->time = time(NULL); // function returns the current time
La mia domanda è abbastanza semplice. È questo il modo giusto per accedere/modificare la memoria condivisa? È questo l'approccio migliore?
(sto usando System V semafori per la sincronizzazione e non ho incluso quel codice. Volevo solo per assicurarsi che io sono l'accesso/modifica della memoria condivisa in modo corretto.)
Se l'altro processo è 'fork()' ed, allora non ci sono problemi con IPC_PRIVATE se la memoria condivisa viene creata prima di 'fork()'. L'avvertenza è valida nel caso più generale, però. –