Sous-routine srcsbuf_r

Objectif

Obtient l'état d'un sous-serveur ou d'un sous-système et renvoie le texte de l'état à imprimer.

Bibliothèque

Bibliothèque du contrôleur de ressources système (libsrc.a)

Syntaxe

#include <spc.h>

int srcsbuf_r(Host, Type, SubsystemName, SubserverObject, SubsystemPID,
StatusType, StatusFrom, StatusText, Continued, SRCHandle)

char * Host, * SubsystemName;
char * SubserverObject, ** StatusText;
short  Type,  StatusType;
pid_t  SubsystemPID;
int  StatusFrom, * Continued;
char ** SRCHandle;

Descriptif

La sous-routine srcsbuf_r obtient le statut d'un sous-serveur ou d'un sous-système et renvoie un texte imprimable pour le statut dans l'adresse indiquée par le paramètre StatusText . La sous-routine srcsbuf_r prend en charge toutes les fonctions de la sous-routine srcbuf à l'exception du paramètre StatusFrom .

Lorsque le paramètre StatusType est SHORTSTAT et que le paramètre Type est SUBSYSTEM, la sous-routine srcstat_r est appelée pour obtenir le statut d'un ou de plusieurs sous-systèmes. Lorsque le paramètre StatusType est LONGSTAT et que le paramètre Type est SUBSYSTEM, la sous-routine srcrsqt_r est appelée pour obtenir le statut long d'un sous-système. Lorsque le paramètre Type n'est pas SUBSYSTEM, la sous-routine srcsrqt_r est appelée pour obtenir le statut long ou court d'un sous-serveur.

Cette routine admet les unités d'exécution multiples et est réentrante.

Paramètres

Article Descriptif
Hôte Indique l'hôte externe sur lequel cette action de statut est demandée. Si l'hôte est null, la demande de statut est envoyée au contrôleur de ressources système (SRC) sur l'hôte local.
type Indique si la demande de statut s'applique au sous-système ou au sous-serveur. Si le paramètre Type est défini sur SUBSYSTEM, la demande de statut concerne un sous-système. Si ce n'est pas le cas, la demande de statut concerne un sous-serveur et le paramètre Type est un point de code de sous-serveur.
SubsystemName Indique le nom du sous-système sur lequel l'état doit être obtenu. Pour obtenir l'état de tous les sous-systèmes, utilisez la constante SRCALLSUBSYS . Pour obtenir le statut d'un groupe de sous-systèmes, le paramètre SubsystemName doit commencer par la constante SRCGROUP , suivie du nom du groupe pour lequel vous souhaitez ajouter le statut. Si vous spécifiez un paramètre SubsystemName null, vous devez spécifier un paramètre SubsystemPID .
SubserverObject Indique un objet sous-serveur. Le paramètre SubserverObject modifie le paramètre Type . Le paramètre SubserverObject est ignoré si le paramètre Type est défini sur SUBSYSTEM. L'utilisation du paramètre SubserverObject est déterminée par le sous-système et l'appelant. Ce paramètre sera placé dans leobjnamede la structure subreq qui est transmise au sous-système.
SubsystemPID Indique l'ID de processus du sous-système sur lequel le statut doit être obtenu, tel qu'il est renvoyé par la sous-routine srcstrt . Vous devez spécifier le paramètre SubsystemPID si plusieurs instances du sous-système sont actives et que vous demandez un statut de sous-système long ou de sous-serveur. Si vous spécifiez un paramètre SubsystemPID null, vous devez spécifier un paramètre SubsystemName .
StatusType Indique LONGSTAT pour le statut long ou SHORTSTAT pour le statut court.
StatusFrom Indique si les erreurs d'état et les messages doivent être imprimés dans la sortie standard ou simplement renvoyés à l'appelant. Lorsque le paramètre StatusFrom est SSHELL, les erreurs sont imprimées dans la sortie standard. La valeur SSHELL n'est pas recommandée dans un environnement à unités d'exécution multiples car les messages d'erreur dans la sortie standard peuvent être imbriqués de manière inattendue.
StatusText Alloue de la mémoire pour le texte imprimable et définit le paramètre StatusText pour qu'il pointe vers cette mémoire. Une fois le texte imprimé, le processus appelant doit libérer la mémoire allouée à cette mémoire tampon.
Continué Indique si cet appel à la sous-routine srcsbuf_r est la suite d'une demande de statut. Si le paramètre Suite est défini sur NEWREQUEST, une demande de statut est envoyée et la sous-routine srcsbuf_r attend une réponse. Lors du retour de la sous-routine srcsbuf_r , le paramètre Suite est mis à jour avec le nouvel indicateur de continuation du paquet de réponse. L'indicateur de continuation dans le paquet de réponse sera défini sur END ou STATCONTINUES par le sous-système. Si le paramètre Suite est défini sur une valeur autre que END, l'appelant ne doit pas modifier cette valeur ; sinon, cette fonction ne pourra plus recevoir de paquets pour la demande de statut d'origine. Le processus appelant ne doit pas définir la valeur du paramètre Suite sur une valeur autre que NEWREQUEST. Dans un traitement normal, le paramètre Suite ne doit pas être modifié alors que d'autres réponses sont attendues. L'appelant doit continuer à appeler la sous-routine srcsbuf_r jusqu'à ce que END soit reçu. Vous pouvez également appeler la sous-routine srcsbuf_r avec Continued=SRC_CLOSE pour supprimer les données restantes, fermer le socket et libérer les mémoires tampon internes.
SRCHandle Identifie une demande et ses réponses associées. Défini sur NULL par l'appelant pour une NEWREQUEST. La sous-routine srcsbuf_r sauvegarde une valeur dans SRCHandle pour permettre aux appels de continuation srcsbuf_r d'utiliser les mêmes sockets et tampons internes. Le paramètre SRCHandle ne doit pas être modifié par l'appelant à l'exception de NEWREQUEST.

Valeurs renvoyées

Si la sous-routine srcsbuf_r aboutit, elle renvoie la taille (en octets) du texte imprimable désigné par le paramètre StatusText .

Codes d'erreur

La sous-routine srcsbuf_r échoue et renvoie le code d'erreur correspondant si l'une des conditions d'erreur suivantes est détectée:

Article Descriptif
SRC_BADSOCK La demande n'a pas pu être transmise au sous-système en raison d'un échec de socket.
CONT SRC Le sous-système utilise des signaux. La demande ne peut pas aboutir.
SRC_DMNA Le démon SRC n'est pas actif.
SRC_INET_AUTHORIZED_HOST L'hôte local ne se trouve pas dans le fichier /etc/hosts.equiv distant.
SRC_INET_INVALID_HOST Sur l'hôte distant, l'hôte local est inconnu.
UTILISATEUR_IN_SRC_valide L'utilisateur n'est pas un superutilisateur ou un système de groupe.
SRC_MMRY Un composant SRC n'a pas pu allouer la mémoire dont il a besoin.
SRC_NOCONTINUE Le paramètre Suite n'a pas été défini sur NEWREQUESTet aucune continuation n'est actuellement active.
SRC_NORPLY La demande a expiré lors de l'attente d'une réponse.
SRC_NSVR Le sous-système n'est pas actif.
SRC_SOCK Un incident s'est produit au niveau des communications de socket SRC.
SRC_STPG La demande n'a pas été transmise au sous-système. Le sous-système est en cours d'arrêt.
SRC_UDP Le port SRC n'est pas défini dans le fichier /etc/services .
SRC_UHOST L'hôte étranger est inconnu.
SRC_WICH Plusieurs instances du sous-système sont actives.

Exemples

  1. Pour obtenir le statut d'un sous-système, entrez:
    char *status;
    int continued=NEWREQUEST;
    int rc;
    char *handle 
    
    do {
      rc=srcsbuf_r("MaryC", SUBSYSTEM, "srctest", "", 0,
         SHORTSTAT, SDAEMON, &status, continued, &handle);
       if (status!=0)
        {
            printf(status);
            free(status);
            status=0;
        }
    }  while (rc>0);
    if (rc<0)
    {
       ...handle error from srcsbuf_r...
    } 

    Le statut abrégé de lasrctestsur le sous-systèmeMaryCet imprime le statut formaté dans la sortie standard.

    Attention: Dans un environnement à unités d'exécution multiples, l'appelant doit gérer le partage de la sortie standard entre les unités d'exécution. Définissez le paramètre StatusFrom sur SDAEMON pour empêcher l'impression de messages d'erreur inattendus dans la sortie standard.

  2. Pour obtenir le statut d'un sous-serveur, entrez:
    char *status;
    int continued=NEWREQUEST;
    int rc;
    char *handle 
     
    do {
      rc=srcsbuf_r("", 12345, "srctest", "", 0,
         LONGSTAT, SDAEMON, &status, continued, &handle);
       if (status!=0)
        {
            printf(status);
            free(status);
            status=0;
        }
    }  while (rc>0);
    if (rc<0)
    {
       ...handle error from srcsbuf_r...
    }
      

    Permet d'obtenir un statut long pour un sous-serveur spécifique appartenant au sous-systèmesrctest. Le sous-serveur est celui qui possède le point de code12345. Cette demande est traitée sur la machine locale. L'état formaté est imprimé dans la sortie standard.

    ATTENTION :
    Dans un environnement à unités d'exécution multiples, l'appelant doit gérer le partage de la sortie standard entre les unités d'exécution. Définissez le paramètre StatusFrom sur SDAEMON pour empêcher l'impression de messages d'erreur inattendus dans la sortie standard.