2012-01-06 8 views
11

Apriamo una memoria condivisa spinta che è stato creato da un altro processo come questoil permesso di regolazione per la memoria condivisa creato da spinta

boost::interprocess::managed_shared_memory segment(boost::interprocess::open_only, "SharedMem"); 

Ma se il processo che ha creato la memoria condivisa è stato un utente root, quindi la lettura processo esso, se fosse un utente normale, non riuscirà con il motivo:

terminate called after throwing an instance of 'boost::interprocess::interprocess_exception' 
what(): Permission denied 

Cosa devo fare per evitare questo? cioè dare il permesso alla memoria condivisa a tutti?

risposta

6

Se si guarda il shared_memoryconstructor, ci vuole un oggetto permissions. boost::interprocess::permissions::set_unrestricted è probabilmente quello che stai cercando per

void set_unrestricted(); 
//Sets permissions to unrestricted access: 
//  A null DACL for windows or 0666 for UNIX. 

Secondo this, è stato aggiunto nella versione 1.45

+0

qual è la modalità mode_t? –

+0

e in quale versione è stata implementata? –

+0

Vedere il mio aggiornamento ... aggiunto 1.45 o successivo –