2010-02-14 6 views
1

J'ai un code hérité qui utilise shmget/shmat/shmdt pour créer, attacher et gérer des segments de mémoire partagée.Modification de la taille de segment de mémoire partagée existante

L'application avec le code plante parfois, laissant les segments en mémoire. Le code réutilise la même clé de segment pour se reconnecter à eux, mais le problème est qu'il utilise des tailles de mémoire partagées différentes à chaque fois et ne peut pas se connecter à cause de cela.

Ma question est:

1) Est-il possible de changer la taille de la mémoire partagée sur la connexion?

2) Si non, comment je peux me connecter au segment de mémoire partagée (même si je ne connais pas la taille), afin de l'effacer (pour une recréation ultérieure d'un segment plus récent)?

Merci!

Répondre

1

Vous pouvez utiliser shmctl pour supprimer et créer votre propre taille. Je suppose que le code hérité va essayer d'utiliser la mémoire partagée existante si elle n'est pas capable de shmget?

+0

Salut. Shmctl nécessite shmid, qui ne peut être récupéré que par shmget. Et shmget ne fonctionne pas si je ne connais pas la taille exacte. C'est exactement le problème :). Une idée? – SyBer

+0

Vous devriez pouvoir utiliser strace pour déterminer quels appels shmget l'application utilise. –

+0

J'ai le code source de l'application - ce n'est pas un problème. Problème: la taille de la mémoire partagée déjà allouée peut être différente de celle déjà spécifiée. Dans ce cas, shmget ne fonctionne pas - car il nécessite la taille EXACT du segment de mémoire partagée existant (inconnu au moment de l'exécution de shmget). – SyBer

Questions connexes