next up previous contents
Next: Kill des sémaphores Up: Les autres fonctions Previous: Communication bloquante

Accès aux variables du bloc de communication

Les variables du bloc de communication donnent le status de la dernière communication. Ce sont status, erreur et code d'erreur.

Lorsque l'on réserve un serveur, si on ne désire pas connaître le status de la dernière communication, on peut effacer tout les status avec la fonction clearsv(). Par exemple:

 
shmstat=shmwait()
shmstat=clearsv()
Par contre, si on désire connaître le status de la dernière communication les fonctions shmgerr(), shmgsta() et shmgcod() permettre de les récupérer. Par exemple:

 
local code_err=""
shmstat=shmwait()
if shmgsta.ne.0 then
  ...
endif
if shmgerr().ne.0 then
   if shmgerr().eq.1 then
      code_err=shmgcod()
      ...
   else
      ...
endif
shmstat=clearsv()
Ces différents status sont valides chaque fois que le client a la main sur le bloc de communication.

Un autre exemple montre le traitement d'une erreur survenant sur le serveur:

Par exemple, une fonction xxx peut retourner deux codes d'erreur en cas de problèmes "no_space" ou "no_name" . Ces situations sont gérable:

 
shmstat=shmwait()
shmstat=shmput("COMMAND","@xxx")
shmstat=shmack()
shmstat=shmwack()
if (shmstat.ne.0) then
    if (shmstat.eq.1) then
        if leq(shmgcod(),"no_space") then
           ...
        endif
        if leq(shmgcod(),"no_name") then
           ...
        endif
    else
        ...
    endif
endif


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