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:

  1. Détermine la taille de la mémoire partagée requise et crée un segment de mémoire partagée de cette taille.
  2. Déplace tous les contextes statiques et toutes les statistiques référencées par ces contextes vers la mémoire partagée.
  3. Appelle le SPMI et le demande pour ajouter tous les contextes statiques DDS à l'arborescence de contexte.
Remarque :
  1. La sous-routine SpmiDdsInit lance un appel à la sous-routine SpmiInit si le programme d'application n'en a pas lancé un.
  2. 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.