Sous-routine SpmiDdsInit
Objectif
- Établit un programme en tant que programme DDS (Dynamic Data-Supplier).
Bibliothèque
Bibliothèque PMI (libSpmi.a)
Syntaxe
#include sys/Spmidef.h SpmiShare *SpmiDdsInit(CxTab, CxCnt, IxTab, IxCnt,
FileName)
cx_create *CxTab, *IxTab;
int CxCnt, IxCnt;
char *FileName;Descriptif
La sous-routine SpmiDdsInit permet d'établir un programme en tant que programme dynamique de fourniture de données (DDS). Pour ce faire, la sous-routine SpmiDdsInit:
- Détermine la taille de la mémoire partagée requise et crée un segment de mémoire partagée de cette taille.
- Déplace tous les contextes statiques et toutes les statistiques référencées par ces contextes vers la mémoire partagée.
- Appelle le SPMI et le demande pour ajouter tous les contextes statiques DDS à l'arborescence de contexte.
- La sous-routine SpmiDdsInit lance un appel à la sous-routine SpmiInit si le programme d'application n'en a pas lancé un.
- Si le programme appelant utilise la mémoire partagée à d'autres fins, notamment pour le mappage de fichiers, l'appel à la sous-routine SpmiDdsInit ou SpmiInit doit être effectué avant que l'accès à d'autres zones de mémoire partagée ne soit établi.
Ce sous-programme fait partie de l'option serveur du produit sous licence Performance Aide for AIX.
Paramètres
- CxTab
Indique un pointeur vers la table des contextes non volatils à ajouter.
- CxCnt
Indique le nombre d'éléments dans la table des contextes non volatils. Utilisez la macro CX_L pour trouver cette valeur.
- IxTab
Indique un pointeur vers la table des contextes volatils que le programme peut ajouter ultérieurement. Si aucun contexte n'est défini, spécifiez NULL.
- IxCnt
Indique le nombre d'éléments dans la table des contextes volatils. Utilisez la macro CX_L pour trouver cette valeur. Si aucun contexte n'est défini, indiquez 0.
- FileName
Indique le chemin d'accès complet et le nom de fichier à utiliser lors de la création du segment de mémoire partagée. Lors de l'exécution, si le fichier existe, le processus exécutant le DDS doit pouvoir écrire dans le fichier. Dans le cas contraire, l'appel à la sous-routine SpmiDdsInit n'aboutit pas. Si le fichier n'existe pas, il est créé. Si le fichier ne peut pas être créé, la sous-routine renvoie une erreur. Si le nom de fichier inclut des répertoires qui n'existent pas, la sous-routine renvoie une erreur.
Pour les systèmes nonAIX , un sixième argument est requis pour indiquer à l'interface SPMI la quantité de mémoire à allouer dans le segment de mémoire partagée DDS. Cette opération n'est pas requise pour les systèmes AIX car il existe des fonctions permettant d'étendre une allocation de mémoire dans la mémoire partagée. Le sixième argument est:
- Taille
Taille en octets de la zone de mémoire partagée à allouer au programme DDS. Ce paramètre est de type int.
Valeurs renvoyées
En cas de succès, la sous-routine SpmiDdsInit renvoie l'adresse de la zone de contrôle de la mémoire partagée. Si une erreur se produit, un texte d'erreur est placé dans le tableau de caractères SpmiErrmsg externe et la sous-routine renvoie une valeur NULL.
Codes d'erreur
Toutes les sous-routines SPMI utilisent des variables externes pour fournir des informations d'erreur. Pour accéder à ces variables, un programme d'application doit définir les variables externes suivantes:
- extern char SpmiErrmsg[] ;
- extern int SpmiErrno;
Si la sous-routine est renvoyée sans erreur, la variable SpmiErrno est définie sur 0 et le tableau de caractères SpmiErrmsg est vide. Si une erreur est détectée, la variable SpmiErrno renvoie un code d'erreur, tel que défini dans le fichier sys/Spmidef.h , et la variable SpmiErrmsg contient du texte, en anglais, expliquant la cause de l'erreur.
Fichiers
| Article | Descriptif |
|---|---|
| /usr/include/sys/Spmidef.h | Déclare les sous-routines, les structures de données, les descripteurs et les macros qu'un programme d'application peut utiliser pour accéder à l'interface SPMI. |