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
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
- 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.
- 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.