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é:
block->line
).
block->line
).
block->pid_client
et block->pid_server
).
block->ackno
).
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
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:
COMMAND
".
COMMAND
" et considère son contenu comme une commande qu'il exécute.