srcsrqt 子例程

用途

向子系统发送请求。

系统资源控制器库 (libsrc.a)

语法

#include <spc.h> srcsrqt(Host, SubsystemName, SubsystemPID,
RequestLength, SubsystemRequest, ReplyLength, ReplyBuffer, StartItAlso, Continued)

char * Host, * SubsystemName;

char * SubsystemRequest, * ReplyBuffer;

int  SubsystemPID,  StartItAlso, * Continued;

short  RequestLength, * ReplyLength;

描述

srcsrqt 子例程向子系统发送请求,等待响应,并向调用者返回一个或多个应答。 请求和应答的格式由调用者和子系统确定。

注: srcsrqt 子例程创建自己的套接字以向子系统发送请求。 此功能打开的套接字将保持打开状态,直到接收到错误或结束包为止。

srcsrqt 子例程返回两种类型的延续:

描述
无延续 ReplyBuffer->srchdr.continued设置为 END 常量。
应答延续 ReplyBuffer->srchdr.continued未设置为 END 常量,而是设置为由调用进程和子系统商定的正值。 将包返回给调用者。

参数

描述
SubsystemPID 子系统的进程标识。
主机 指定要在其上发送此子系统请求的外部主机。 如果主机为空,那么会将请求发送到本地主机上的子系统。 本地用户必须作为“root”用户运行。 必须配置远程系统以接受系统资源控制器的请求。 即 srcmstr 守护程序(请参阅 /etc/inittab)必须用 -r 标志启动,并且必须配置 /etc/hosts.equiv.rhosts 文件以允许远程请求。
SubsystemName 指定要将此请求发送至的子系统的名称。 如果未指定 SubsystemPID. ,那么必须指定 SubsystemName
RequestLength 指定要发送到子系统的请求的长度 (以字节计)。 此参数的最大值 (以字节计) 为 2000 字节。
SubsystemRequest 指向子系统请求包。
ReplyLength 指定要从子系统接收的应答的最大长度 (以字节计)。 从 srcsrqt 子例程返回时, ReplyLength 参数设置为子系统应答包的实际长度。
ReplyBuffer 指向用于从子系统接收应答包的缓冲区。
StartItAlso 指定子系统处于非活动状态时是否应启动。 当非零时,系统资源控制器 (SRC) 尝试启动非活动子系统,然后将请求传递给子系统。
已继续 指定对 srcsrqt 子例程的此调用是否是先前请求的延续。 如果 Continued 参数设置为 NEWREQUEST,那么将向子系统发送对它的请求,并通知子系统期望另一响应。 调用进程不应将 Continued 设置为除 NEWREQUEST以外的任何值。 子系统的最后一个响应将 Continued 设置为 END

返回值

如果 srcsrqt 子例程成功,那么将返回值 SRC_OK

错误代码

如果下列一项或多项为 true ,那么 srcsrqt 子例程将失败:

描述
SRC_BADSOCK 由于套接字故障,无法将请求传递到子系统。
SRC_CONT 子系统使用信号。 请求无法完成。
SRC_DMNA SRC 守护程序未处于活动状态。
src_inet_authorized_host 本地主机不在远程 /etc/hosts.equiv 文件中。
src_inet_invalid_host 在远程主机上,本地主机未知。
src_invalid_user 用户不是 root 用户或组系统。
SRC_MMRY SRC 组件无法分配它所需的内存。
SRC_NOCONTINUE Continued 参数未设置为 NEWREQUEST,并且当前没有活动的延续。
SRC_NORPLY 请求等待响应时超时。
SRC_NSVR 该子 系统不是活动的。
SRC_REQLEN2BIG RequestLength 大于最大 2000 字节。
SRC_SOCK SRC 套接字通信存在问题。
SRC_STPG 该请求未传递到子系统。 子系统正在停止。
SRC_UDP /etc/services 文件中未定义 SRC 端口。
SRC_UHOST 外部主机未知。

示例

  1. 要请求长子系统状态,请输入:
    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);

    此条目获取子系统的长状态srctestMaryC机器。 子系统一直发送状态包,直到statbuf.srchdr.cont=END.

  2. 要启动子服务器,请输入:
    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);

    此条目使用以下代码点启动子服务器:1234,但仅当子系统已处于活动状态时。

  3. 要启动子服务器和子系统,请输入:
    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);

    此条目使用以下代码点启动子服务器:1234.如果此子服务器所属的子系统未处于活动状态,那么将启动该子系统。

文件

描述
/etc/services 定义用于因特网服务的套接字和协议。
/dev/SRC 指定 AF_UNIX 套接字文件。
/dev/.SRC-unix 指定临时套接字文件位置。