Só permitir processo pai para desvincular compartilhada objeto de memória

votos
0

Eu tenho vários processos que usos shm_open(que podem ser geradas em qualquer ordem).

Todos eles têm o mesmo fluxo como:

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..
}

Então, se o objeto de memória compartilhada já existe, ele só abre em vez de tentar criá-lo. Existe uma maneira de fazer o mesmo para se o processo atual não abri-lo, não desvinculá-lo?

Eu pergunto porque se eu tiver 3+ processos filho e um pai, se um dos dies crianças e desencadeia a shm_unlinknão mais processos filho pode conectar e se comunicar com o pai desde que foi desvinculado.

Existe uma maneira de ter filhos processos não conseguem desvincular o que não criou? IE: Como acionar EACCESSpara shm_unlinkou gatilho algo semelhante?

EACCES - Permissão para shm_unlink () o objeto de memória compartilhada foi negado.

Publicado 03/12/2019 em 00:00
fonte usuário
Em outras línguas...                            


1 respostas

Só permitir processo pai para desvincular compartilhada objeto de memória

votos
0

Eu tenho vários processos que usos shm_open(que podem ser geradas em qualquer ordem).

Todos eles têm o mesmo fluxo como:

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..
}

Então, se o objeto de memória compartilhada já existe, ele só abre em vez de tentar criá-lo. Existe uma maneira de fazer o mesmo para se o processo atual não abri-lo, não desvinculá-lo?

Eu pergunto porque se eu tiver 3+ processos filho e um pai, se um dos dies crianças e desencadeia a shm_unlinknão mais processos filho pode conectar e se comunicar com o pai desde que foi desvinculado.

Existe uma maneira de ter filhos processos não conseguem desvincular o que não criou? IE: Como acionar EACCESSpara shm_unlinkou gatilho algo semelhante?

"EACCES - Permissão para shm_unlink () o objeto de memória compartilhada foi negado."

Respondeu 03/12/2019 em 00:00
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more