srcstat 子例程

用途

获取一个或多个子系统上的短状态。

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

语法

#include <spc.h>
int srcstat(Host,
SubsystemName
,SubsystemPID, ReplyLength, StatusReply,Continued)
char * Host, * SubsystemName;
int  SubsystemPID * Continued;
short * ReplyLength;
void * StatusReply;

描述

srcstat 子例程向系统资源控制器 (SRC) 发送简短状态请求,并将一个或多个子系统的状态返回给调用者。

参数

描述
主机 指定要求在其上进行状态操作的外部主机。 如果主机为空,那么会将状态请求发送到本地主机上的 SRC。 本地用户必须作为“root”用户运行。 必须配置远程系统以接受系统资源控制器的请求。 即 srcmstr 守护程序(请参阅 /etc/inittab)必须用 -r 标志启动,并且必须配置 /etc/hosts.equiv.rhosts 文件以允许远程请求。
SubsystemName 指定要在其上获取简短状态的子系统的名称。 要获取所有子系统的状态,请使用 SRCALLSUBSYS 常量。 要获取子系统组的状态, SubsystemName 参数必须以 SRCGROUP 常量开头,后跟要为其附加状态的组的名称。 如果指定空 SubsystemName 参数,那么必须指定 SubsystemPID 参数。
SubsystemPID 指定要在其上获取状态的子系统的 PID ,如 srcstat 子例程所返回。 如果子系统的多个实例处于活动状态并且您请求长子系统状态或子服务器状态,那么必须指定 SubsystemPID 参数。 如果指定空 SubsystemPID 参数,那么必须指定 SubsystemName 参数。
ReplyLength 指定 srchdr 结构的大小加上 statcode 结构的数目乘以一个 statcode 结构的大小。 从 srcstat 子例程返回时,将更新此值。
StatusReply 指定一个指向结构的指针,该结构包含作为 struct srchdr 的第一个元素和作为 struct statcode 的第二个元素 (这两个元素都在 spc.h 文件中定义) 数组,该数组接收所请求子系统的状态应答。 返回的 statcode 数组的第一个元素包含状态标题行。 Statcode 结构数组项数取决于用户查询的子系统数。
已继续 指定对 srcstat 子例程的此调用是否是先前状态请求的延续。 如果 Continued 参数设置为 NEWREQUEST,那么将向 SRC 发送短子系统状态请求,并且 srcstat 将等待第一个状态响应。 调用进程不应将 Continued 设置为除 NEWREQUEST以外的值。 SRC 的最后一个响应将 Continued 设置为 END

返回值

如果 srcstat 子例程成功,它将返回值 0。 如果子例程不成功,那么将返回错误代码。

错误代码

如果下列其中一个或多个为 true ,那么 srcstat 子例程将失败:

描述
SRC_DMNA SRC 守护程序未处于活动状态。
src_inet_authorized_host 本地主机不在远程 /etc/hosts.equiv 文件中。
src_inet_invalid_host 在远程主机上,本地主机未知。
src_invalid_user 用户不是 root 用户或组系统。
SRC_MMRY SRC 组件无法分配它所需的内存。
SRC_NOCONTINUE 继续 未设置为 NEWREQUEST ,当前没有任何继续处于活动状态。
SRC_NORPLY 请求等待响应时超时。
SRC_SOCK SRC 套接字通信存在问题。
SRC_UDP /etc/services 文件中未定义 SRC 端口。
SRC_UHOST 外部主机未知。

示例

  1. 要请求子系统的状态,请输入:
    intcont=NEWREQUEST;
    struct {
               struct srchdr srchdr
               struct statcode statcode[6];
    } status;
    short replen=sizeof(status);
     
    srcstat("MaryC","srctest",0,&replen,&status,&cont);

    此条目请求子系统的所有实例的简短状态srctestMaryC机器。

  2. 要请求所有子系统的状态,请输入:
    int cont=NEWREQUEST;
    struct {
        struct srchdr srchdr;
        struct statcode statcode[80];
    } status;
    short replen=sizeof(status);
     
    srcstat("",SRCALLSUBSYS,0,&replen,&status,&cont);

    此条目请求本地机器上所有子系统的简短状态。

  3. 要请求子系统组的状态,请输入:
    int cont=NEWREQUEST;
    struct struct {
        struct srchdr srchdr;
    struct statcode statcode[30];
    } status;
    short replen=sizeof(status), rep_num;
    char subsysname[30];
     
    strcpy(subsysname,SRCGROUP);
    strcat(subsysname,"tcpip");
    srcstat("",subsysname,0,&replen,&status, &cont);
    
    rep_num = (replen - sizeof(strcut srchdr)) / sizeof(strcut statcode);
    
    for (i = 0; i < rep_num; i++)
        printf("objtype %d status %d objname %s objtext %s\n",
                status.statcode[i].objtype, status.statcode[i].status,
                status.statcode[i].objname, status.statcode[i].objtext);
    

    此条目请求子系统组的所有成员的简短状态tcpip并在 stdout上显示查询结果。

文件

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