вывод списка объектов общей памяти в Solaris по имени
-
08-07-2019 - |
Вопрос
Я могу использовать ipcs (1), чтобы вывести список активных объектов общей памяти в окне Solaris 10, но он перечисляет их по ключу. Я открываю объекты с помощью shm_open (3), который принимает символьную строку в качестве имени для идентификации объекта. Есть ли способ перечислить объекты общей памяти по имени или просто получить ключ & Lt; - & Gt; name mapping? В основном меня интересует что-то для запуска из командной строки, хотя API для этого тоже подойдет. Спасибо!
Решение
Насколько я помню, общая файловая память POSIX в Solaris отображается в файловой системе либо непосредственно в /tmp/
в виде файлов .SHMDxxx
, либо в разделе /var/tmp/.SHMD/
. Это может помочь, а может и не помочь, и у меня нет под рукой коробки Solaris для проверки.
Другие советы
Я не знаю, как составить список имен или получить сопоставления ключей / имен. Но я думаю, что знаю 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;
}