Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

OpenVMS に関する特別な考慮事項

$ZF を使用して、OpenVMS システム・サービスを呼び出すことができます。CZF.M64 という名前のファイルにある、ObjectScript 以外の各ルーチンにインタフェースを定義します。また、$ZF を使用して、OpenVMS システム・サービス・ルーチンを呼び出し、DCL コマンド・プロシージャやその他の高水準言語のルーチンを呼び出すこともできます。

以下の項目について説明します。

  • CZF.M64 の使用 — コールアウト・コードの作成では C が優先言語ですが、.M64 マクロ・ファイルを使用することもできます。

  • 特権レベルを上げる ZFPRIV の使用 — コールアウト関数に呼び出し元の通常の特権レベルだけでなく、SHARE 以外のすべての特権を与える ZFPRIV 文について説明します。

  • システム・サービスでの V リンクの使用 — "v" リンク・タイプで OpenVMS 記述子を渡すことによって、OpenVMS システム・サービスおよびライブラリ・ルーチンを呼び出す方法を説明します。

  • DSM に代わる $ZF 関数呼び出し — OpenVMS システムに付属している組み込み CZF.EXE コールアウト・ライブラリのコンテンツを説明します。

CZF.M64 の使用

コールアウト・コードを記述する優先言語は C ですが (“InterSystems コールアウト・ライブラリの作成” で説明されているように CZF.C ファイルを作成)、マクロ・ファイル (CZF.M64) を使用することもできます。C コンパイラがある場合、CZF.C を使用します。それ以外の場合、CZF.M64 を使用します。両方を使用することができません。

CZF.M64 ファイルを使用する際は、.SHOW コマンドと .END コマンドの間に、ZFENTRY 文のみを入力します。この文は、以下の形式にする必要があります。

   ZFENTRY CALLNAME=name,LINKNAME=fname,ARGS=atype,PRIVS=priv
  • CALLNAME — NAME $ZF 関数呼び出しで、Caché が外部関数を呼び出す名前です。

  • LINKNAME — ユーザ記述の外部関数のエントリ・ポイント名です。CZF.C で使用する ZFENTRY 文のエントリ・ポイント引数に相当します。

  • ARGS — どのように引数を渡すかを記述した文字列です。CZF.C で使用する ZFENTRY 文の argtypes 引数に相当します (“ZFENTRY の argtypes” を参照)。

    構造体と引数のプロトタイプ定義は、インクルード・ファイル cdzf.h にあります。インターシステムズの追加の内部定義もまた、ここで宣言されています。

  • PRIVS — 関数を上位特権レベルで実行させるには、“YES” を入力します。呼び出し関数と同じ特権レベルで関数を実行させるには、“NO” を入力します。

呼び出し形式が異なっても、これは C プログラムで使用される ZFENTRY 文と基本的に同じです (“ZFEntry テーブルの作成” を参照)。

CZF.M64 のアセンブル

CZF.M64 をアセンブルするため、以下のコマンドを DCL プロンプトから発行します。

$ MAC /ALPHA CZF.M64

特権レベルを上げる ZFPRIV の使用

ZFENTRY 文は、呼び出しプロセスの特権レベルで実行します。これに SHARE 特権以外のすべての特権を与える場合、ZFPRIV 文で外部関数を記述することができます。ZFPRIV 文は、名前と以下の引数リストの最後に追加されている引数 "privileges" 以外は、ZFENTRY 文と同じ形式です。

 ZFPRIV("name","argtypes",entrypoint,privileges)

privileges 引数は、以下のいずれかになります。

  • PRIV — 関数は上位特権レベルで実行します。

  • NOPRIV — 関数は、呼び出しプロセスの特権レベルで実行します。

czf.c ファイルを OpenVMS と他のオペレーティング・システムの間で変更せずに移動できるようにするために、これらのマクロには以下の効果があります。

  • OpenVMS の ZFENTRY では、呼び出し元の通常の特権レベルで実行する $ZF 関数を定義します。これは、$ZF 関数が他のオペレーティング・システムで動作する方法です。

  • ZFPRIV では、プログラマが $ZF 関数を呼び出し元の特権レベルで実行するか、またはプロセスが Caché 内にあるときに持つ上位特権レベル (SHARE 以外のすべての特権) で実行するかを指定できます。

71 システム・サービスでの V リンクの使用

OpenVMS システム・サービスとライブラリ・ルーチンの呼び出しに対応するため、OpenVMS 記述子を "v" リンク・タイプを使用して渡すことができます。

struct dsc$descriptor s * v V OpenVMS のみ: OpenVMS システム・サービスを呼び出すときに使用します。

この例では、OpenVMS 関数 LIB$TRIM_FILESPEC を ObjectScript に公開します。ObjectScript から、次の呼び出しが使用可能になります。

 SET newfilespec=$ZF("TRIM FILESPEC",oldfilespec,width)

CZF インタフェースは 32 の実パラメータをそれが呼び出すすべての関数に渡します。32 の実パラメータよりも少ない場合は、それらのパラメータに対して NULL が渡されます。LIB$TRIM_FILESPEC は、多くのライブラリおよびシステム関数と同様に実パラメータの数をカウントするため、簡単なラッパ関数を宣言する必要があります。

#ifdef __VMS
  ZFENTRY("TRIM_FILESPEC","viV",trim_filespec)
#endif

ラッパ関数を以下に示します。

関数 trim_filespec
#ifdef __VMS
int trim_filespec(struct dsc$descriptor_s*oldfilespec,int width,struct dsc$descriptor_s*newfilespec){
  short int resultwidth;
  int s;

  if(width> ZFString)return ZF_FAILURE;
  s= LIB$TRIM_FILESPEC(oldfilespec,newfilespec,&width,&resultwidth);
  newfilespec->dsc$w_length= resultwidth;
  return s;
}
#endif

DSM に代わる $ZF 関数呼び出し

このセクションでは、DSM VMS システム・サービスの Zcall 関数をエミュレートするための $ZF 関数の引数として提供できる、Caché 提供の (内部) 関数について説明します。これらの関数は、標準 CZF.EXE コールアウト・イメージに含まれます。このイメージのカスタマイズの詳細は、“OpenVMS でのカスタム CZF.EXE ファイルの作成” を参照してください。

以下の内部関数について説明します。

  • GETJPI — ジョブおよびプロセス情報を取得します。

  • GETDVI — デバイス特性を取得します。

  • GETSYI — システム情報を取得します。

  • SETSYM — DCL シンボル値を設定します。

  • GETSYM — DCL シンボル値を返します。

  • DELSYM — DCL シンボル値を削除します。

  • CRELOG — 論理名を作成します。

  • TRNLNM — 論理名を変換します。

  • DELLOG — 論理名を削除します。

  • GETUAI — アカウントの承認パラメータを返します。

  • GETMSG — ステータス・コードのメッセージ・テキストを返します。

  • SETPRN — 呼び出しプロセスの名前を設定します。

  • SETPRI — プロセスのベース優先度を設定します。

  • OPCOM — オペレータにメッセージを送信します。

  • MOUNT — デバイスをマウントします。

  • DISMOUNT — デバイスをディスマウントします。

  • DIRECTORY — 既定のディレクトリを返します。

  • PARSE — ファイル名を解析します。

  • GETFILE — ファイル情報を返します。

$ZF 内部関数

内部関数はすべて、関数名とその後に続くその他のパラメータのみを指定することによって $ZF で呼び出すことができます。以下は、GETUAI を関数として使用する例です。

    SET x = $ZF("GETUAI","FRED","USERNAME")
Note:

ここでは、関数名はすべて大文字で表記されていますが、実際には大文字と小文字は区別されません。

GETJPI

ジョブおよびプロセス情報を返します。

   SET x = $ZF("GETJPI",pid,item)
   SET x = $ZF("GETJPI",,item,procname)

パラメータ :
  • pid — プロセス ID (10 進数)

  • item — 返すプロセス情報の項目コード

  • procname — プロセス名 (pid の代わりに使用)

GETJPI の項目コード
ACCOUNT DFPFC IMAGECOUNT PHDFLAGS TMBU
APTCNT DFWSCNT IMAGNAME PID TQCNT
ASTACT DIOCNT IMAGPRIV PPGCNT TQLM
ASTCNT DIOLM JOBPRCCNT PRCCNT TT_ACCPORNAM
ASTEN DIRIO JOBTYPE PRCLM TT_PHYDEVNAM
ASTLM EFCS LOGINTIM PRCNAM UAF_FLAGS
AUTHPRI EFCU MASTER_PID PRI UIC
AUTHPRIV EFWM MAXDETACH PRIB USERNAME
BIOCNT ENQCNT MAXJOBS PROC_INDEX VIRTPEAK
BIOLM ENQLM MEM PROCPRIV VOLUMES
BUFIO EXCVEC MODE SCHED_POLICY VP_CONSUMER
BYTCNT FAST_VP_SWITCH MSGMASK SHRFILLM VP_CPUTIM
BYTLM FILCNT NODENAME SITESPEC WSAUTH
CLINAME FILLM NODE_CSID SLOW_VP_SWITCH WSAUTHEXT
CPU_ID FINALEXC NOD_VERSION STATE WSEXTENT
CPULIM FREP0VA OWNER STS WSPEAK
CPUTIM FREP1VA PAGEFLTS STS2 WSQUOTA
CREPRC FREPTECNT PAGFILCNT SWPFILLOC WSSIZE
FLAGS GPGCNT PAGFILLOC TABLENAME
CURPRIV GRP PGFLQUOTA TERMINAL

GETDVI

デバイス特性を返します。

SET x = $ZF("GETDVI",devname,item,flag)
パラメータ :
  • devname — 物理デバイス名、または物理デバイス名と同等の論理デバイス名

  • item — 返すプロセス情報の項目コード

  • flag — 1 は 1 次的な特性、2 は 2 次的な特性、既定値は 2 です。

GETDVI の項目コード
ACPTYPE EXISTS PID TT_AUTOBAUD TT_MODHANGUP
ALL FOD RCK TT_AVO TT_NOBRDCST
ALLDEVNAM FOR RCT TT_BLOCK TT_NOECHO
ALLOCLASS FREEBLOCKS REC TT_BRDCSTMBX TT_NOTYPEAHD
ALT_HOST_AVAIL FULLDEVNAM RECSIZ TT_CRFILL TT_OPER
ALT_HOST_NAME GEN REFCNT TT_DECCRT TT_PAGE
ALT_HOST_TYPE HOST_AVAIL REMOTE_DEVICE TT_DECCRT2 TT_PASTHRU
AVL HOST_COUNT RND TT_DIALUP TT_PHYDEVNAM
CCL HOST_NAME ROOTDEVNAM TT_DISCONNECT TT_PRINTER
CLUSTER HOST_TYPE RTM TT_DMA TT_READSYNC
CONCEALED IDV SDI TT_DRCS TT_REGIS
CYLINDERS LOCKID SECTORS TT_EDIT TT_REMOTE
DEVBUFSIZ LOGVOLNAM SERIALNUM TT_EDITING TT_SCOPE
DEVCHAR MAXBLOCK SERVED_DEVICE TT_EIGHTBIT TT_SECURE
DEVCHAR2 MAXFILES SHR TT_ESCAPE TT_SETSPEED
DEVCLASS MBX SPL TT_FALLBACK TT_SIXEL
DEVDEPEND MEDIA_ID SPLDEVNAM TT_HALFDUP TT_SYSPWD
DEVDEPEND2 MEDIA_NAME SQD TT_HANGUP TT_TTSYNC
DEVLOCKNAM MEDIA_TYPE STS TT_HOSTSYNC TT_WRAP
DEVNAM MNT SWL TT_INSERT UNIT
DEVSTS MOUNTCNT TRACKS TT_LFFILL VOLCOUNT
DEVTYPE NET TRANSCNT TT_LOCALECHO VOLNAM
DIR NEXTDEVNAM TRM TT_LOWER VOLNUMBER
DMT ODV TT_ACCPORNAM TT_MBXDSABL VOLSETMEM
DUA OPCNT TT_ALTYPEAHD TT_MECHFORM VPROT
ELG OPR TT_ANSICRT TT_MECHTAB WCK
ERRCNT OWNUIC TT_APP_KEYPAD TT_MODEM

GETSYI

システム情報を返します。

SET x = $ZF("GETSYI",item,csid[,nodename])
パラメータ :
  • item — 引用符付きの文字列として指定される、返すシステム・パラメータ値の項目キーワード・コード

  • csid — 情報を取得するクラスタ・メンバのノード CSID (クラスタ・ノード ID) パラメータ。

    すべてのクラスタ・ノードを検索する場合は -1 を指定します。csid に-1 を指定した以降の各呼び出しでは、クラスタ内の次のノードの item キーワード情報が返されます。すべてのノードの順次処理が完了すると、空文字列 ("") が返されます。csid に -1 以外の値を指定すると、ノードへの順次アクセスが終了します。

    オプションの nodename パラメータを指定する場合は (プレースホルダとして) 0 を指定します。

  • nodenameオプション — 引用符付きの文字列として指定されるクラスタ・ノード。クラスタ・ノードは nodename または csid によって指定できます。クラスタ・ノードを nodename によって指定するときは、csid に値 0 を指定します。

GETSYI の項目コード
ACTIVECPU_CNT CLUSTER_FTIME FREE_GBLPAGES PAGEFILE_FREE PQL_MFILLM
ARCHFLAG CLUSTER_MEMBER FREE_GBLSECTS PAGEFILE_PAGE PQL_MENQLM
ARCH_NAME CLUSTER_NODES GBLPAGES PQL_DWSDEFAULT SCSNODE
ARCH_TYPE CLUSTER_QUORUM GBLPAGFIL PQL_DWSEXTENT SPTREQ
AVAILCPU_CNT CPU GBLSECTIONS PQL_DWSQUOTA SRPCOUNTV
BALSETCNT CONTIG_GBLPAGES LOCKIDTBL PQL_MWSDEFAULT SWAPFILE_FREE
BJOBLIM CPUTYPE LOCKIDTBL_MAX PQL_MWSEXTENT SWAPFILE_PAGE
BOOTTIME DECIMAL_EMULATED MAXPROCESSCNT PQL_MWSQUOTA VERSION
CHARACTER_EMULATED D_FLOAT_EMULATED MAXSYSGROUP PQL_MASTLM VIRTUALPAGECNT
CLUSTER_EVOTES HW_MODEL NODENAME PQL_MBYTLM WSMAX
CLUSTER_FSYSID HW_NAME NODE_CSID PQL_MDIOLM

SETSYM

特定の値に DCL シンボルを設定します。DCL シンボルはローカル、グローバルのどちらでもかまいません。SETSYM は NULL 文字列を返します。

SET x = $ZF("SETSYM",symbol,value,flag)
パラメータ :
  • symbol — 設定する DCL シンボル

  • value — DCL シンボルの値

  • flag — 1 はローカル、2 はグローバル、既定値は 1 です。

GETSYM

指定された DCL シンボルの値を返します。DCL シンボルはローカル、グローバルのどちらでもかまいません。flag 値の 1 を使用して、シンボル・タイプを決定できます。DCL 値は、SETSYM 関数によって設定されます。

SET x = $ZF("GETSYM",symbol[,flag])
パラメータ :
  • symbol — 値を返す DCL シンボル

  • flagオプション — ブーリアン値。1 を指定すると、未定義シンボルには 0、ローカル・テーブルには 1、グローバル・テーブルには 2 を返します。0 を指定すると、シンボル値を返します。既定値は 0 です。

DELSYM

指定された DCL シンボルの値を削除します。DCL シンボルはローカル、グローバルのどちらでもかまいません。DCL 値は、SETSYM 関数によって設定されます。

SET x = $ZF("DELSYM",symbol,flag)
パラメータ :
  • symbol — 設定する DCL シンボル

  • flag — 1 はローカル、2 はグローバル、既定値は 1 です。

CRELOG

指定されたモードの指定された論理名テーブルに論理名を作成します。既定では、type=USER モードおよび table= プロセスの論理名テーブルです。CRELOG は NULL 文字列を返します。

SET x = $ZF("CRELOG",logname,value[,type[,table]])
パラメータ :
  • logname — 作成する論理名

  • value — 論理名と同等の文字列

  • typeオプション — 定義するテーブル・モード。使用できる値の詳細は以下のとおりです。既定は USER モード。

  • tableオプション — ユーザ定義の論理名テーブルの名前。type=TABLE の場合、table 値が必要です。既定はプロセスの論理名テーブル。

使用可能な type の値は、以下のとおりです。

  • USER = プロセス・テーブル/USER モード

  • SUPERVISOR または PROCESS = プロセス・テーブル/Supervisor モード

  • JOB = ジョブ・テーブル — LNM$JOB

  • GROUP = グループ・テーブル — LNM$GROUP

  • SYSTEM = システム・テーブル — LNM$SYSTEM

  • TABLE = ユーザ定義の論理名テーブルの名前

TRNLNM

論理名を変換し、同等の名前文字列または要求された属性を返します。一致が検出されない場合、TRNLNM は NULL 文字列を返します。

SET x = $ZF("TRNLNM",logname,table,index,acmode,trans,item)
パラメータ :
  • logname — 作成する論理名

  • table — ユーザ定義の論理名テーブルの名前。既定はプロセスの論理名テーブル。

  • index — 複数変換の場合の論理名のインデックス

  • acmode — アクセス・モード。使用可能な値は、USERSUPERVISOREXECUTIVE、および KERNEL

  • trans — 大文字/小文字変換のタイプ。利用可能な値は CASE_BLIND および CASE_SENSITIVE

  • item — 返す論理名に関する情報のタイプ。使用可能な値は、ACCESS_MODECONCEALEDCONFINECRELOGLENGTHMAX_INDEXNO_ALIASTABLETABLE_NAMETERMINAL、および VALUE

DELLOG

指定された論理名テーブルの論理名を削除します。

SET x = $ZF("DELLOG",logname,type,table)
パラメータ :
  • logname — 作成する論理名

  • type — 論理名のタイプ

  • table — ユーザ定義の論理名テーブルの名前。既定はプロセスの論理名テーブル。

GETUAI

特定の OpenVMS アカウントの承認パラメータの値を返します。

SET x = $ZF("GETUAI",account,item)
パラメータ :
  • account — アカウント名

  • item — 項目コード

GETUAI の項目コード
ACCOUNT DFWSCNT LASTLOGIN_N PGFLQUOTA UIC
ASTLM DIOLM LGICMD PRCCNT USERNAME
BIOLM ENQLM MAXACCTJOBS PRI WSEXTENT
BYTLM FILLM MAXDETACH PRIV WSQUOTA
DEFDEV FLAGS MAXJOBS QUEPRI
DEFDIR JTQUOTA OWNER SHRFILLM
DEF_PRIV LASTLOGIN_I PBYTLM TQCNT

GETMSG

指定されたステータス・コードに対応するメッセージ・テキストを返します。

SET x = $ZF("GETMSG",code)
パラメータ :
  • code — エラーのステータス・コード

SETPRN

呼び出し元のプロセスの名前を、指定された OpenVMS プロセス名に設定します。

SET x = $ZF("SETPRN",pname)
パラメータ :
  • pname — 有効な OpenVMS プロセス名

SETPRI

指定されたプロセスのベース優先度を設定します。対象プロセスは CACHE イメージを実行している必要があります。

SET x = $ZF("SETPRI",pri,pid)
パラメータ :
  • pri  — 0 から 15 までの整数 (0 と 15 を含む) で指定されるプロセスのベース優先度

  • pid — プロセス ID (10 進数)

OPCOM

指定されたメッセージをオペレータのターミナルに送信します。その結果、NULL 文字列を返します。

SET x = $ZF("OPCOM",msg)
パラメータ :
  • msg — オペレータのターミナルに送信するメッセージ文字列

MOUNT

指定されたデバイスをマウントします。この関数は、LIB$SPAWN を呼び出して、DCL コマンドの MOUNT を発行します。

SET x = $ZF("MOUNT",devnam,label,options,lognam)
パラメータ :
  • devnam — デバイス名

  • label — デバイス・ラベル

  • options — DCL ディクショナリに指定されている 1 つ以上のマウント・オプション

  • lognam — デバイスに割り当てる論理名

DISMOUNT

指定されたデバイスをディスマウントします。この関数は、LIB$SPAWN を呼び出して、DCL コマンドの DISMOUNT を発行します。

SET x = $ZF("DISMOUNT",devnam,options)
パラメータ :
  • devnam — デバイス名

  • options — DCL ディクショナリに指定されている 1 つ以上のディスマウント・オプション

DIRECTORY

現在の OpenVMS 既定ディレクトリを返します。また、オプションとして、OpenVMS 既定ディレクトリを指定されたディレクトリに設定します。

SET x = $ZF("DIRECTORY",dir)
パラメータ :
  • dir — 新しいディレクトリ名

PARSE

指定されたファイル名を解析し、解析されたファイル名を返します。PARSE は RMS $PARSE サービスを呼び出します。

SET x = $ZF("PARSE",filename,defname,relname,keyword,flag)
パラメータ :
  • filename — 解析するファイル名

  • defname — 既定のファイル名

  • relname — 関連付けられたファイル名

  • keyword — 解析されたファイル名から返すフィールド値を指定します。使用可能な値は、NODEDEVICEDIRECTORYNAMETYPE、および VERSION

  • flag — I/O チェックを行うかどうかを指定するフラグ。1 は I/O チェックを行いません、0 は I/O チェックを行います。既定値は 0 です。

GETFILE

指定されたファイルに関する情報を返します。この関数は、同じキーワードを使用して、F$FILE_ATTRIBUTES 字句関数をエミュレートします。GETFILE は、OpenVMS の標準フォーマットで UIC を返し、True を 1、False を 0 として返します。

SET x = $ZF("GETFILE",filename,keyword)
パラメータ :
  • filename — ファイルの名前

  • keyword — 対象ファイルから返す属性を指定します。

GETFILE のキーワード
ALQ DEQ GBC NOK RVN
BDT DID IBS ORG SIZ
BKS DVI LRL PRO UIC
BLS EDT LVL PVN WCK
CBT EOF MBM RAT
CDT FID MRN RCK
CTG FSZ MRS RDT
DBS GRP NOA RFM
FeedbackOpens in a new tab