2009-10-28 4 views
2

Je peux utiliser ipcs (1) pour répertorier les objets de mémoire partagée actifs sur une boîte Solaris 10, mais les répertorie par clé. J'ouvre les objets via shm_open (3), cependant, qui prend une chaîne de caractères en tant que nom pour identifier l'objet. Existe-t-il un moyen de lister les objets de mémoire partagée par nom, ou simplement d'obtenir la clé < -> mapping de nom? Je suis surtout intéressé par quelque chose à exécuter à partir de la ligne de commande, même si une API pour faire cela serait OK, aussi. Merci!Liste des objets de mémoire partagée sous Solaris par leur nom

+0

Apparemment, ma supposition qu'il y a un mappage 1-à-1 entre les clés et les noms était incorrecte. Une autre façon de demander cela ... Sous Linux, je peux faire: 'ls -l/dev/shm' et voir les informations que je tente d'obtenir sous Solaris 10. – Chris

Répondre

2

Pour autant que je me rappelle la mémoire partagée sous Solaris apparaît POSIX sur le système de fichiers soit directement sous /tmp/ que .SHMDxxx fichiers ou sous /var/tmp/.SHMD/. Cela peut ou peut ne pas vous aider et je n'ai pas de boîte Solaris à portée de main pour valider.

+0

Oui, '/ tmp/.SHMD *' sur ma machine. Donc je pensais que c'était quelque chose de magique à propos de shm_open (3), mais on dirait que c'est probablement juste un wrapper autour de open (2) qui crée le fichier de sauvegarde sur un système de fichiers approprié? Merci! – Chris

+0

shm_open renvoie le descripteur "file" après tout, que vous êtes supposé convertir en mmap. Je peux me tromper, mais je suppose que cela est fait comme une sorte de piratage VFS (besoin de regarder dans les sources Solaris pour cela :) –

-1

Je ne connais pas un moyen de lister des noms ou d'obtenir des mappages de clés/noms. Mais je pense que je connais une API qui va résoudre votre problème.

Je pense que vous pouvez attacher le segment à partir de la clé en utilisant l'interface System V, qui est également une API Posix. Je crois que la façon dont il fonctionne est quelque chose comme:

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; 
} 
+0

Les interfaces IPC du système V sont différentes de POSIX IPC Interface!!!! –

Questions connexes