вывод списка объектов общей памяти в Solaris по имени - PullRequest
2 голосов
/ 28 октября 2009

Я могу использовать ipcs (1) для вывода списка активных объектов совместно используемой памяти на коробке Solaris 10, но она перечисляет их по ключу. Я открываю объекты с помощью shm_open (3), который принимает символьную строку в качестве имени для идентификации объекта. Есть ли способ перечислить объекты общей памяти по имени или просто получить ключ <-> сопоставление имен? В основном меня интересует что-то для запуска из командной строки, хотя API для этого тоже подойдет. Спасибо!

Ответы [ 2 ]

2 голосов
/ 28 октября 2009

Насколько я помню, общая память POSIX в Solaris отображается в файловой системе либо непосредственно в /tmp/ как .SHMDxxx файлы, либо в /var/tmp/.SHMD/. Это может помочь, а может и не помочь, и у меня нет удобной для проверки коробки Solaris.

0 голосов
/ 28 октября 2009

Я не знаю, как составить список имен или получить сопоставления ключей / имен. Но я думаю, что знаю API, который решит вашу проблему.

Я думаю, что вы можете прикрепить сегмент к ключу с помощью интерфейса System V, который также является API-интерфейсом Posix. Я считаю, что это работает примерно так:

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