Sous-routine srcsrpy
Objectif
Renvoie une réponse à une demande du contrôleur de ressources système (SRC) au processus client.
Bibliothèque
System Resource Controller Library (libsrc.a)Syntaxe
#include <spc.h>
struct srchdr *SRChdr;
char *PPacket;
int PPacketSize;
ushort Continued;Descriptif
La sous-routine srcsrpy renvoie une réponse de sous-système à une demande de sous-système du contrôleur de ressources système (SRC). Le format et le contenu de la réponse sont déterminés par le sous-système et le demandeur, mais ils doivent commencer par une structure srchdr . Cette structure et toutes les autres requises pour la communication du sous-système avec le code SRC sont définies dans le fichier /usr/include/spc.h . Le sous-système doit répondre avec un format et un contenu prédéfinis pour les demandes suivantes: START, STOP, STATUS, REFRESH, et TRACE. Les demandes START, STOP, REFRESHet TRACE doivent recevoir une réponse avec une structure srcrep . La demande STATUS doit recevoir une réponse sous la forme d'une structure statbuf .
Paramètres
| Article | Descriptif |
|---|---|
| SRChdr | Pointe vers la mémoire tampon d'adresse de réponse renvoyée par la sous-routine srcrrqs . |
| Paquet | Pointe vers le paquet de réponse. Le premier élément du paquet de réponse est une structure srchdr . :NONE.contL'élément de la structure PPacket->srchdr est modifié lors du renvoi à partir de la sous-routine srcsrpy . Le deuxième élément du paquet de réponse doit être une structure svrreply , un tableau de structures statcode ou un autre format accepté par le sous-système et le demandeur. |
| PPacketSize | Indique le nombre d'octets du paquet de réponse désigné par le paramètre PPacket . Le paramètre PPacketSize peut être la taille d'un shortou être compris entre la taille d'une structure srchdr et la valeur SRCPKTMAX , qui est définie dans le fichier spc.h . |
| Continué | Indique si cette réponse doit être poursuivie. Si le paramètre Suite est défini sur la constante END, aucun autre paquet de réponse n'est envoyé pour cette demande. Si le paramètre Suite est défini sur CONTINUATION, le deuxième élément de ce qui est indiqué par le paramètre PPacket doit être une structure svrreply , carrtnmsgL'élément de la structure svrreply est imprimé dans la sortie standard. Pour une réponse de statut, le paramètre Suite est défini sur STATCONTINUÉet le deuxième élément de ce qui est désigné par le paramètre PPacket doit être un tableau de structures statcode . Si une demande de sous-système STOP est reçue, un seul paquet de réponse peut être envoyé et le paramètre Suite doit être défini sur END. Les autres types de continuations, déterminés par le sous-système et le demandeur, doivent être définis à l'aide de valeurs positives pour le paramètre Suite . Des valeurs autres que les suivantes doivent être utilisées:
|
Valeurs renvoyées
Si la sous-routine srcsrpy aboutit, elle renvoie la valeur SRC_OK.
Codes d'erreur
La sous-routine srcsrpy échoue si l'une des conditions suivantes ou les deux conditions suivantes sont remplies:
| Article | Descriptif |
|---|---|
| SRC_SOCK | Un incident s'est produit au niveau des communications de socket SRC. |
| SRC_REPLYSZ | La taille de réponse SRC n'est pas valide. |
Exemples
- Pour envoyer une réponse de sous-système STOP , entrez:
struct srcrep return_packet; struct srchdr *srchdr; bzero(&return_packet,sizeof(return_packet)); return_packet.svrreply.rtncode=SRC_OK; strcpy(return_packet.svrreply,"srctest"); srcsrpy(srchdr,return_packet,sizeof(return_packet),END);Cette entrée envoie un message indiquant que le sous-systèmesrctestest en cours d'arrêt.
- Pour envoyer une réponse de sous-serveur START , entrez:
struct srcrep return_packet; struct srchdr *srchdr; bzero(&return_packet,sizeof(return_packet)); return_packet.svrreply.rtncode=SRC_SUBMSG; strcpy(return_packet.svrreply,objname,"mysubserver"); strcpy(return_packet.svrreply,objtext,"The subserver,\ mysubserver, has been started"); srcsrpy(srchdr,return_packet,sizeof(return_packet),END);Le message résultant indique que la demande de démarrage du sous-serveur a abouti.
- Pour envoyer une réponse de statut, entrez:
int rc; struct sockaddr addr; int addrsz; struct srcreq packet; struct { struct srchdr srchdr; struct statcode statcode[10]; } status; struct srchdr *srchdr; struct srcreq packet; . . . /* grab the reply information from the SRC packet */ srchdr=srcrrqs(&packet); bzero(&status.statcode[0].objname, /* get SRC status header */ srcstathdr(status.statcode[0].objname, status.statcode[0].objtext); . . . /* send status packet(s) */ srcsrpy(srchdr,&status,sizeof(status),STATCONTINUED); . . . srcsrpy(srchdr,&status,sizeof(status),STATCONTINUED); /* send final packet */ srcsrpy(srchdr,&status,sizeof(struct srchdr),END);Cette entrée envoie plusieurs paquets de statut.
Fichiers
| Article | Descriptif |
|---|---|
| /dev/.SRC-unix | Indique l'emplacement des fichiers de socket temporaires. |