Pregunta

Puedo usar ipcs (1) para enumerar los objetos activos de memoria compartida en un cuadro de Solaris 10, pero los enumera por clave. Sin embargo, estoy abriendo los objetos a través de shm_open (3), que toma una cadena de caracteres como nombre para identificar el objeto. ¿Hay alguna forma de enumerar los objetos de memoria compartida por nombre, o simplemente obtener la clave & Lt; - & Gt; name mapping? Estoy interesado principalmente en algo que se ejecute desde la línea de comandos, aunque una API para hacerlo también estaría bien. Gracias!

¿Fue útil?

Solución

Hasta donde recuerdo, la memoria compartida POSIX en Solaris aparece en el sistema de archivos, ya sea directamente debajo de /tmp/ como .SHMDxxx archivos o debajo de /var/tmp/.SHMD/. Esto podría o no ayudarlo y no tengo un cuadro de Solaris a mano para validar.

Otros consejos

No conozco una forma de enumerar nombres u obtener asignaciones de clave / nombre. Pero creo que conozco una API que resolverá su problema.

Creo que puede adjuntar el segmento de la clave utilizando la interfaz del Sistema V, que también es una API Posix. Creo que la forma en que funciona es algo así como:

int attach_shmem(key_t key, void** pp){
    void* p;
    int id;

    id = shmget(key, 0, 0);
    if (id < 0) {
        perror("shmget");
        return ERR_SHMGET;
    }
    p = shmat(id, 0, 0);
    if ((long)p == -1) {
        perror("shmat");
        return ERR_SHMAT;
    }
    *pp = p;
    return 0;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top