Ho un più processi che utilizzi shm_open
(possono essere deposto le uova in qualsiasi ordine).
Tutti loro hanno lo stesso flusso di:
int shm_fd = shm_open(pid, O_CREAT | O_EXCL | O_RDWR, S_IRWXU);
if (shm_fd == -1 && errno == EEXIST)
{
//The object is already created so open it instead..
shm_fd = shm_open(pid, O_RDWR, S_IRWXU);
}
if (shm_fd != -1)
{
//do stuff..
}
Quindi, se l'oggetto di memoria condivisa esiste già, solo che l'apre invece di cercare di crearlo. C'è un modo per fare la stessa cosa per se il processo attuale non aprirlo, non scollegare vero?
Lo chiedo perché se ho 3+ processi figlio e un genitore, se uno degli stampi bambini e fa scattare il shm_unlink
non più processi figli possono connettersi e comunicare con il genitore da quando è stato scollegato.
C'è un modo per avere figli processi non riescono a scollegare ciò che essi non hanno creato? IE: come innescare EACCESS
per shm_unlink
o un trigger qualcosa di simile?
EACCES - Permesso di shm_unlink () l'oggetto di memoria condivisa è stato negato.