Sous-routine srcsrqt
Objectif
Envoie une demande à un sous-système.
Bibliothèque
Bibliothèque du contrôleur de ressources système (libsrc.a)
Syntaxe
RequestLength, SubsystemRequest, ReplyLength, ReplyBuffer, StartItAlso, Continued)
char * Host, * SubsystemName;
char * SubsystemRequest, * ReplyBuffer;
int SubsystemPID, StartItAlso, * Continued;
short RequestLength, * ReplyLength;
Descriptif
La sous-routine srcsrqt envoie une demande à un sous-système, attend une réponse et renvoie une ou plusieurs réponses à l'appelant. Le format de la demande et de la réponse est déterminé par l'appelant et le sous-système.
Deux types de continuation sont renvoyés par la sous-routine srcsrqt :
| Article | Descriptif |
|---|---|
| Pas de continuation | ReplyBuffer->srchdr.continuedest définie sur la constante END . |
| Continuation de la réponse | ReplyBuffer->srchdr.continuedn'est pas définie sur la constante END , mais sur une valeur positive convenue par le processus appelant et le sous-système. Le paquet est renvoyé à l'appelant. |
Paramètres
| Article | Descriptif |
|---|---|
| SubsystemPID | ID de processus du sous-système. |
| Hôte | Indique l'hôte externe sur lequel cette demande de sous-système doit être envoyée. Si l'hôte est null, la demande est envoyée au sous-système sur l'hôte local. L'utilisateur local doit s'exécuter en tant que "root". Le système distant doit être configuré pour accepter les demandes du contrôleur de ressources système distant. Autrement dit, le démon srcmstr (voir /etc/inittab) doit être démarré avec l'indicateur -r et le fichier /etc/hosts.equiv ou .rhosts doit être configuré pour autoriser les demandes à distance. |
| SubsystemName | Indique le nom du sous-système auquel cette demande doit être envoyée. Vous devez spécifier un SubsystemName si vous ne spécifiez pas de SubsystemPID. |
| RequestLength | Indique la longueur, en octets, de la demande à envoyer au sous-système. La valeur maximale en octets pour ce paramètre est de 2000 octets. |
| SubsystemRequest | Pointe vers le paquet de demande du sous-système. |
| ReplyLength | Indique la longueur maximale, en octets, de la réponse à recevoir du sous-système. Lors du retour de la sous-routine srcsrqt , le paramètre ReplyLength est défini sur la longueur réelle du paquet de réponse du sous-système. |
| ReplyBuffer | Pointe vers une mémoire tampon pour la réception du paquet de réponse du sous-système. |
| StartItAlso | Indique si le sous-système doit être démarré s'il n'est pas actif. Lorsque cette valeur est différente de zéro, le contrôleur de ressources système (SRC) tente de démarrer un sous-système inactif, puis transmet la demande au sous-système. |
| Continué | Indique si cet appel à la sous-routine srcsrqt est la suite d'une demande précédente. Si le paramètre Suite est défini sur NEWREQUEST, une demande est envoyée au sous-système et ce dernier est averti qu'une autre réponse est attendue. Le processus appelant ne doit jamais définir Suite sur une valeur autre que NEWREQUEST. La dernière réponse du sous-système définira Suite sur END. |
Valeurs renvoyées
Si la sous-routine srcsrqt aboutit, la valeur SRC_OK est renvoyée.
Codes d'erreur
La sous-routine srcsrqt échoue si une ou plusieurs des conditions suivantes sont remplies:
| 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_REQLEN2BIG | La valeur de RequestLength est supérieure à la valeur maximale de 2000 octets. |
| 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. |
Exemples
- Pour demander le statut du sous-système long, entrez:
int cont=NEWREQUEST; int rc; short replen; short reqlen; struct { struct srchdr srchdr; struct statcode statcode[20]; } statbuf; struct subreq subreq; subreq.action=STATUS; subreq.object=SUBSYSTEM; subreq.parm1=LONGSTAT; strcpy(subreq.objname,"srctest"); replen=sizeof(statbuf); reqlen=sizeof(subreq); rc=srcsrqt("MaryC", "srctest", 0, reqlen, &subreq, &replen, &statbuf, SRC_NO, &cont);Cette entrée obtient le statut long du sous-systèmesrctestleMaryCvirtuelle. Le sous-système continue d'envoyer des paquets d'état jusqu'àstatbuf.srchdr.cont=END.
- Pour démarrer un sous-serveur, entrez:
int cont=NEWREQUEST; int rc; short replen; short reqlen; struct { struct srchdr srchdr; struct statcode statcode[20]; } statbuf; struct subreq subreq; subreq.action=START; subreq.object=1234; replen=sizeof(statbuf); reqlen=sizeof(subreq); rc=srcsrqt("", "", 987, reqlen, &subreq, &replen, &statbuf, SRC_NO, &cont);Cette entrée démarre le sous-serveur avec le point de code de1234, mais uniquement si le sous-système est déjà actif.
- Pour démarrer un sous-serveur et un sous-système, entrez:
int cont=NEWREQUEST; int rc; short replen; short reqlen; struct { struct srchdr srchdr; struct statcode statcode[20]; } statbuf; struct subreq subreq; subreq.action=START; subreq.object=1234; replen=sizeof(statbuf); reqlen=sizeof(subreq); rc=srcsrqt("", "", 987, reqlen, &subreq, &replen, &statbuf, SRC_YES, &cont);Cette entrée démarre le sous-serveur avec le point de code de1234.Si le sous-système auquel appartient ce sous-serveur n'est pas actif, le sous-système est démarré.
Fichiers
| Article | Descriptif |
|---|---|
| /etc/services | Définit les sockets et les protocoles utilisés pour les services Internet. |
| /dev/SRC | Indique le fichier socket AF_UNIX . |
| /dev/.SRC-unix | Indique l'emplacement des fichiers de socket temporaires. |