QWTRTVTA : スレッド属性検索 API とは実行中の JOB 属性を検索できる API である。
では JOB を検索する API : QUSLJOB や QUSRJOBI とはどのように違うのだろう?
QUSRJOBI ではなく QWTRTVTA を使わなければならない理由とは何だろうか?
No | パラメータ | 入出力 | 属性 |
---|---|---|---|
1 | レシーバー変数 | 出力 | Char(*) |
2 | レシーバー変数の長さ | 入力 | Bin(4) |
3 | 形式名 | 入力 | Char(8) |
4 | JOB識別情報 | 入力 | Char(*) |
5 | JOB識別情報の形式 | 入力 | Char(8) |
6 | 戻すフィールド数 | 入力 | Bin(4) |
7 | 戻すフィールドのキー | 入力 | Bin(4)の配列 |
8 | パフォーマンス統計をリセットする | 入力 | Char(1) |
9 | エラー・コード | 入力 | Char(*) |
[参考] https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/apis/qwtrtvta.htm
0001.00 #include <stdio.h>
0002.00 #include <stdlib.h>
0003.00 #include <string.h>
0004.00 #include <QWTRTVTA.h>
0005.00 #include <QUSEC.h>
0006.00
0007.00 #define TRUE 0
0008.00 #define FALSE -1
0009.00
0010.00 void main(void){
0011.00 char outbuf[1000];
0012.00 Qwt_RTVT0100_t *qwt_rtv0100;
0013.00 Qwt_RTVT_Receiver_InfoData_t *info;
0014.00 char active_job_status[100];
0015.00 int end_job_reason;
0016.00 Qwc_JIDF0100_t jobinfo;
0017.00 int keys[2] = {
0018.00 QWCA_KEY_ACTIVEJOBSTATUS,
0019.00 QWCA_KEY_JOBENDREASON
0020.00 };
0021.00 Qus_EC_t errcode = {0, 0};
0022.00
0023.00 printf("** TESTRTVA : QWTRTVTA : スレッド属性の取得 **\n");
0024.00 getchar();
0025.00
0026.00 memset(&jobinfo, 0, sizeof(jobinfo));
0027.00 memcpy(jobinfo.Job_Name, "QPADEV0021", 10);
0028.00 memcpy(jobinfo.User_Name, "QTR ", 10);
0029.00 memcpy(jobinfo.Job_Number, "781441", 6);
0030.00 memset(jobinfo.Int_Job_ID, ' ', sizeof(jobinfo.Int_Job_ID));
0031.00 jobinfo.Thread_Indicator = -1;
0032.00 QWTRTVTA(outbuf, sizeof(outbuf), "RTVT0100", &jobinfo,
0033.00 "JIDF0100", 2, (void*)&keys, "0", &errcode);
0034.00 qwt_rtv0100 = (void*)outbuf;
0035.00 /* Active job Status */
0036.00 info = (void*)(&outbuf[qwt_rtv0100->Offset_Key_Fields]);
0037.00 memset(active_job_status, 0, sizeof(active_job_status));
0038.00 memcpy(active_job_status, &info[1], info->Length_Data);
0039.00 /* End Job Reason */
0040.00 info = (void*)((char*)info + info->Length_Field_Info_Rtnd);
0041.00 memcpy(&end_job_reason, &info[1], sizeof(end_job_reason));
0042.00 printf("[%d] active_job_status = [%s]\n", __LINE__, active_job_status);
0043.00 printf("[%d] end_job_reason = [%d]\n", __LINE__, end_job_reason);
0044.00 getchar();
0045.00 }
この例では JOB : QPADEV0021 QTR 781441 の JOB に対して
API : QWTRTVTA によって JOB 情報を検索して
Active Job Status (実行中のジョブ状況) と End Job Reason (終了の理由) を調べている。
調べることのできる属性は
0017.00 int keys[2] = { 0018.00 QWCA_KEY_ACTIVEJOBSTATUS, 0019.00 QWCA_KEY_JOBENDREASON
のように定義している。
これが「戻すフィールドのキー」であってこの場合は 2 つのキーを指定している。
QWCA_KEY_ACTIVEJOBSTATUS は活動中のジョブの状況を要求するし、
QWCA_KEY_JOBENDREASON は既に JOB が終了してしまったのであれば
その理由を検索する。
この 2 つの情報を一回の実行だけで同時に取得できる API は QWTRTVTA だけである。
実行ジョブ情報の取得には様々な API が用意されているがどの API で
どのような情報を取得できるようにまとめた文書が IBM から提供されていて
このような情報を取得したい場合に、どの API を使うべきかの判断を助けるのに
非常に役に立つ。
AutoWeb では仮想端末 API で対話する相手の実際のジョブが活動中であるかどうかを
調べるために QWTRTVTA を利用している。
以前は QUSLJOB によって活動状態を調べていたが現在ではその理由も同時に
調べることのできる QWTRTVTA によって調査している。
AutoWeb はこのように常にパフォーマンスも含めてよりよい製品になるように
常時、機能改善が図られている。
API : QWTRTVTA は OS V5R2M0 で初めて発表されたので日本語訳は存在していない。
日本語で読みたい場合はこのサイトの
22. Google Chrome で API も日本語表示
を参考にすること。