next up previous contents
Next: Opérations de base sur Up: UTILISATION DE LA LIBRAIRIE Previous: UTILISATION DE LA LIBRAIRIE

Utilisation de la mémoire partagée pour le passage des commandes

La librairie libipc.a utilise une zone de mémoire partagée. Elle est décrite dans le fichier "ipcdef.h" (Actuellement sous $INTERHOME/../incl). Elle définis la structure nommé "block" dans "libipc.c" et "libipcf.c". Nous appellerons cette zone: "le bloc de communication".

Son contenu est le suivant:

#define NB_KW_MAX               100
#define KW_SIZE                 12
#define CONTENT_SIZE            128

struct key_rec  {
        char    key[KW_SIZE];
        char    content[CONTENT_SIZE];
        };

struct  block_kw{
        int             pid_server;
        int             pid_client;
        int             ackno;
        int             stat_server;
        int             err_server;
        char            err_code[80];
        char            current_cmd[20];
        char            err_str_server[256];
        struct key_rec  line[NB_KW_MAX];
        };

Il est utilisé:

  1. pour passer des commandes et des paramètres entre un client et un serveur (block->line).
  2. pour recevoir les résultats facultatifs des commandes provenant du serveur(block->line).
  3. pour mémoriser les PID des intervenants, c'est à dire le client courant et le serveur
    (block->pid_client et block->pid_server).
  4. pour indiquer le type de communication: avec ou sans attente (1 ou 0 dans block->ackno).
  5. pour retourner le status d'une commande ainsi que le message d'erreur (s'il y en a un) depuis serveur vers son client (block->err_server et block->err_str_server). Le code de l'erreur se trouve dans block->err_code, le nom de la commande courante (inter) se trouve dans block->current_cmd
  6. pour tester la survie d'un même serveur entre le début et la fin d'une exécution de commande (block->stat_server).

La structure "line" est composée de 2 éléments, le mot-clé "line->key" et son contenu "line->content", leur nombre et leur taille sont limités de manière statique pour assurer l'intégrité de la taille du bloc de communication avec tout les programmes qui l'utilise. Le nombre de mots-clé est limité à "NB_KW_MAX". Le nom des mots-clé est libre, il ne doit pas comporter plus de "KW_SIZE" caractères (NULL compris), seul le mot-clé contenant le nom de la commande est réservé, il doit s'appeler "COMMAND". Le contenu des mots-clé est uniquement de type caractère et leur longueur ne doit pas excéder "CONTENT_SIZE" (NULL compris).

Un bloc de communication est créé pour chaque serveur. Du point de vue d'un client, le bloc de communication et le serveur sont considérés comme une ressource unique. Le système de synchronisation basé sur les sémaphores permet d'empêcher l'accès d'une ressource par plusieurs client (voir plus bas).

Le principe d'envoi de commande est le suivant:

  1. le client vide le bloc de communication.
  2. le client place la commande destinée au serveur sous le mot-clé réservé "COMMAND".
  3. le client place les paramètres facultatifs.
  4. le client passe la main au serveur (voir plus bas sous "Modes de synchronisation").
  5. Le serveur cherche le mot-clé "COMMAND" et considère son contenu comme une commande qu'il exécute.
  6. Le serveur cherche les mots-clé facultatifs.
    Ensuite, lorsque le serveur à terminé et si le client est en attente de résultats:
  7. Le serveur vide le bloc de communication et y place les résultats sous la forme de mots-clé avec leur contenu.
  8. Le serveur passe la main au client (voir plus bas sous "Modes de synchronisation")
  9. Le client récupère les résultats.

next up previous contents
Next: Opérations de base sur Up: UTILISATION DE LA LIBRAIRIE Previous: UTILISATION DE LA LIBRAIRIE

WEBER Luc
Mon May 10 13:41:34 MET DST 1999