OpenVMS
DCL ディクショナリ


前へ 次へ 目次 索引



レキシカル関数

文字列および現在のプロセスに関する属性の情報を戻す関数です。

説明

コマンド言語は,レキシカル関数と呼ばれる機能を含んでいます。レキシカル関数は,現在のプロセスや算術式および文字列に関する情報を返します。コマンド・インタプリタがコマンド処理の入力文字列の解析処理 ( レキシカル処理 ) フェーズを実行する間に関数を評価するため,これらの関数はレキシカル関数と呼ばれます。

通常,シンボルまたは式を使用するコンテキストであれば,任意コンテキストでレキシカル関数を使用できます。コマンド・プロシージャでは,レキシカル関数を使用して論理名の変換,文字列操作の実行,およびプロシージャを処理しているノードの判別を行うことができます。

次に標準的な形式を示します。


F$function-name([args,...]) 

F$ レキシカル関数が後に続くことを示します。
function-name 関数を評価することを指定するキーワード。一意に認識できれば,関数名は省略できます。
() 必要であれば,引数を囲みます。引数をとらない関数を含め,すべての関数で括弧は必要です。
args,... 必要であれば,整数または文字列式を使用して引数を指定します。

式の指定についての詳細は,『OpenVMS ユーザーズ・マニュアル』を参照してください。

表 DCLI-3 では,レキシカル関数とそれぞれが戻す情報について簡単に説明しています。これ以降のページで,各関数ごとに例を挙げて詳しく説明します。

表 DCLI-3 レキシカル関数の要約
関数 説明
F$CONTEXT F$PID 関数とともに使用し,その選択基準を指定します。
F$CSID OpenVMS Cluster識別番号を戻します。また,コンテキスト・シンボルが,システムのノード・リストの中で,現在の位置を示すように変更します。
F$CVSI 文字列データからビット・フィールドを取り出し,その結果を符号付き値として整数に変換します。
F$CVTIME 絶対時刻,デルタ時間またはそれらの組み合せの文字列に関する情報を戻します。
F$CVUI 文字データからビット・フィールドを取り出し,その結果を符号なし値として整数に変換します。
F$DEVICE 選択基準に合う装置名をすべて返します。
F$DIRECTORY 現在の省略時のディレクトリ名文字列を戻します。
F$EDIT 編集リストに指定された編集をもとに,文字列式を編集します。
F$ELEMENT 指定した区切り文字で区切られた要素で構成される文字列から, 1 つの要素を取り出します。
F$ENVIRONMENT DCL コマンド環境に関する情報を戻します。
F$EXTRACT 文字列式から部分文字列を取り出します。
F$FAO $FAO システム・サービスを呼び出し,指定された制御文字列を ASCII 形式の出力文字列に変換します。
F$FILE_ATTRIBUTES 指定されたファイルの属性に関する情報を戻します。
F$GETDVI $GETDVI システム・サービスを呼び出し,指定された装置に関する指定された情報を戻します。
F$GETJPI $GETJPI システム・サービスを呼び出し,指定されたプロセスに関する会計情報,状態情報,および識別情報を戻します。
F$GETQUI $GETQUI システム・サービスを呼び出し,キューに関する情報を戻します。この情報には,バッチ・キュー,プリント・キューに登録されるジョブ,ファーム定義やシステム・バッチ・キュー・ファイルに定義された属性などが含まれます。

+VAX システムでは,キュー・マネージャについての情報も戻します。

F$GETSYI $GETSYI システム・サービスを呼び出し,利用者のシステムに関する状態情報と識別情報を戻します ( システムが,VMScluster の一部に含まれている場合には,ローカルなノードに関する状態情報と識別情報を戻します )。
F$IDENTIFIER 指定した形式の識別子を,それに相当する整数に変換します。あるいは,その逆の操作を実行します。
F$INTEGER 指定した式の結果を,整数で戻します。
F$LENGTH 指定した文字列の長さを戻します。
F$LOCATE 文字列に含まれる 1 文字または部分文字列を探し,文字列中でのそのオフセットを戻します。
F$MESSAGE 指定したシステム状態コードに対応するメッセージ文を戻します。
F$MODE プロセスが実行されているモードを示す文字列を戻します。
F$PARSE $PARSE RMS サービスを起動してファイル指定を解析し,指定した特定のファイル指定,または拡張されたファイル指定を戻します。
F$PID 起動するたびに,次のプロセス識別番号を戻します。
F$PRIVILEGE 現在のプロセス特権が,引数に指定されている特権と一致するかどうかに応じて, TRUE または FALSE という値を戻します。
F$PROCESS 現在のプロセス名を文字列で戻します。
F$SEARCH $SEARCH RMS サービスを呼び出し,ディレクトリ・ファイルを検索し,指定したファイルの完全な形のファイル指定を戻します。
F$SETPRV 指定された特権をセットし,変更される前の特権の状態を示しているキーワード・リストを戻します。
F$STRING 指定した式の結果に相当する文字列を戻します。
F$TIME 現在の日付/時刻を示す文字列を戻します。形式は dd-mmm-yyyy hh:mm:ss.cc です。
F$TRNLNM 論理名を変換し,等価名文字列,または要求されている論理名の属性を戻します。
F$TYPE シンボルのデータ・タイプを判断します。
F$USER 現在の利用者識別コード(UIC)を戻します。
F$VERIFY プロシージャ・チェックの設定がオンの場合には整数の 1 ,プロシージャ・チェックの設定がオフの場合には整数の 0 が戻されます。また,新しいチェック状態をセットすることもできます。


+VAX のみ

F$CONTEXT

F$PID 関数とともに使用し,その選択基準を指定します。 F$CONTEXT 関数を使用すると,F$PID 関数は OpenVMS Cluster 内の任意のノードからプロセス情報を取得できるようになります。

形式

F$CONTEXT (コンテキスト・タイプ,コンテキスト・シンボル,選択項目,選択値,値修飾子)

戻り値


空文字列 ("")。

引数

コンテキスト・タイプ

コンテキスト・タイプを指定します。

現在使用できるコンテキスト・タイプは PROCESS だけです。これは,F$PID に対する選択基準を決めるために使用します。同一 UIC のプロセスを見る場合は,特権は必要ありません。同一 UIC グループ内の別の UIC のプロセスを見る場合は, GROUP 特権が必要です。システム全体の UIC のプロセスを見る場合は, WORLD 特権が必要です。

コンテキスト・シンボル

F$CONTEXT で作成されたコンテキスト・メモリを参照するために, DCL が使用するシンボル名を指定します。 F$PID は,このコンテキスト・シンボルを使用して PID リストを処理します。

シンボルを使用してコンテキスト・シンボルを指定してください。コマンド・プロシージャ内で最初に F$CONTEXT を使用するときには,未定義または空文字列が割り当てられたシンボルを指定してください。シンボルは "PROCESS_CONTEXT" タイプでローカル・シンボルをして作成されます。コンテキストが無効になった場合 (つまり F$PID ですべての PID を検索したか,または,その実行時にエラーが発生した場合) は,シンボルのタイプは "PROCESS_CONTEXT" ではなくなっています。コンテキストをキャンセルする場合は,コマンド・プロシージャ内で F$TYPE 関数を使用して検索できます。

選択基準を設定した後で F$PID を呼び出す場合は,このコンテキスト・シンボルを使用します。

選択項目

選択項目は,F$CONTEXT が使用する選択基準を指定するキーワードです。一度の呼出しに対して 1 つのキーワードしか指定できません。

注意

項目のリストを使用する場合は, NEQ 選択値を使用しないでください。これは,結果として得られる状態値は,つねに "真" だからです。

次に例を示します。


$ EXAMPLE=f$context("PROCESS",CTX,"USERNAME","A*,B*","NEQ") 

この式は,"ユーザ名が A* に等しくない または ユーザ名が B* に等しくない場合は,その規則に合致するユーザのプロセスを返します" と解釈されます。このオペランドは論理和であるので,状態値は常に "真" になります (たとえば ALFRED は B* に等しくないとか, BOB は A* に等しくないというように,どんなユーザ名でも A* あるいは B* に等しくない値となります)。

コンテキスト・タイプ PROCESS に対して使用できる選択項目キーワードを次の表に示します。

選択項目 選択値 値修飾子 説明
ACCOUNT 文字列 EQL,NEQ 有効なアカウント名 ( またはそのリスト )。アスタリスク (*) およびパーセント記号 (%) ワイルドカード文字を使用できる。
AUTHPRI 整数値 GEQ,GTR,LEQ,LSS,EQL,NEQ 許可されたベース優先度。Alpha では (0-63)。VAX では (0-31) をとる。
CANCEL     該当コンテキストに対する選択基準を取り消す。
CURPRIV キーワード ALL,ANY,EQL,NEQ 有効な特権名キーワード ( またはそのリスト )。詳細は『OpenVMS Guide to System Security』参照。
GRP 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ UIC グループ番号。
HW_MODEL 整数 EQL,NEQ 有効なハードウェア型番号
HW_NAME 文字列 EQL,NEQ 有効なハードウェア名またはキーワードのリスト。アスタリスク (*) およびパーセント記号 (%) ワイルドカード文字を使用できる。
JOBPRCCNT 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ ジョブのサブプロセス数
JOBTYPE キーワード EQL,NEQ 有効なジョブ・タイプ・キーワード
(DETACHED, NETWORK, BATCH, LOCAL, DIALUP, REMOTE)。詳細は『OpenVMS ユーザーズ・マニュアル』参照。
MASTER_PID 文字列 EQL,NEQ 主プロセス ID
MEM 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ UIC メンバ番号
MODE キーワード EQL,NEQ プロセス・モード・キーワード
(OTHER,NETWORK,BATCH,および INTERACTIVE)。詳細は『OpenVMS ユーザーズ・マニュアル』参照
NODE_CSID 整数 EQL,NEQ ノードのクラスタ ID 番号
NODENAME 文字列 EQL,NEQ ノード名 ( またはそのリスト )。アスタリスク (*) およびパーセント記号 (%) ワイルドカードを使用できる。省略時の設定はユーザのローカル・ノード。すべてのノードを指定する場合は,値 "*" を使用する。
OWNER 文字列 EQL,NEQ 直親 PID
PRCCNT 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ プロセスのサブプロセス数
PRCNAM 文字列 EQL,NEQ プロセス名 ( またはそのリスト )。アスタリスク (*) およびパーセント記号 (%) ワイルドカード文字を使用できる。
PRI 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ プロセス優先度。 Alpha では (0--63),VAX では (0--31) をとる。
PRIB 整数 GEQ,GTR,LEQ,LSS,EQL,NEQ ベース・プロセス優先度。 Alpha では (0--63),VAX では (0--31) をとる。
STATE キーワード EQL,NEQ 有効なプロセス状態キーワード。詳細は,『OpenVMS System Services Reference Manual』の $GETJPI サービスに関する説明を参照。
STS キーワード EQL,NEQ 有効なプロセス状態キーワード。詳細は,『OpenVMS System Services Reference Manual』の $GETJPI サービスに関する説明を参照。
TERMINAL 文字列 EQL,NEQ 端末名 ( またはそのリスト )。アスタリスク (*) およびパーセント記号 (%) ワイルドカード文字を使用できる。
UIC 文字列 EQL,NEQ ユーザ識別子(UIC)。 "[group,member]"の形式。
USERNAME 文字列 EQL, NEQ ユーザ名 ( またはそのリスト )。アスタリスク (*) およびパーセント記号 (%) ワイルドカード文字を使用できる。

選択値

選択基準の値を指定します。たとえば次の例に示すように,ノード MYVAX 上の全プロセスを処理するには, "NODENAME" キーワードに対して "MYVAX" を指定します。


$ X = F$CONTEXT("PROCESS", ctx, "NODENAME", "MYVAX", "EQL")

いくつかの選択項目では,値をリストにすることもできます。この場合,各値はコンマ (.) で区切らなければなりません。たとえば,ノード名に MYVAX, HERVAX,および HISVAX を指定するには,次のように入力します。


$ X=F$CONTEXT("PROCESS",ctx,"NODENAME","MYVAX,HERVAX,HISVAX","EQL")

ファイルを指定する場合と同様に,いくつかの値に対して,ワイルドカード文字(* や %)を使用できます。

値修飾子

選択値に対する修飾子を指定します。選択値は修飾しなければなりません。

たとえば,次に示すプロセス値のいずれか 1 つに基づいて選択するよう要求することにより,値を修飾できます。

リストの中には,キーワード ALL, ANY, EQL および NEQ で修飾されるものもあります。このようなリストは通常,複数の有効な特権から構成される,プロセス特権マスクのようなマスクです。各キーワードとその意味を次に示します。

複数の選択値を特定の選択修飾子と使用すると, (OR オペランドが指定されているかのように) 選択基準と一致するものを値とみなします。 (AND オペランドが指定されているかのように) 選択値は累積基準ではありません。

ALL は指定した値は存在しなければなりませんが,指定しない他の値も存在しても構いません。 EQL は指定した値は存在しなければなりませんが,指定しない他の値は存在してはなりません。これが,ALL と EQL の相違点です。たとえば,現在のプロセスが TMPMBX と OPER 特権を持っていて,他の特権を持っていても構わない場合は ALL を,他の特権を持っていてはならない場合は EQL をそれぞれ指定します。


説明

F$CONTEXT 関数を使用して F$PID 関数の選択基準を設定します。

F$CONTEXT 関数は,基準を作るときは何度でも呼び出せます。ただし,1 回の呼び出しにつき 1 つの項目しか指定できません。項目値リストが適切な位置に与えられれば,複数のコンテキストを同時に操作することができます。

適切な呼出しで選択基準を設定したら,F$PID を繰り返し呼出して, F$CONTEXT 関数で指定した基準と合う全てのプロセス識別番号 (PID) を戻します。基準と合うプロセスが無くなると,空文字列が戻されます。

F$PID 関数が呼び出されると,コンテキスト・シンボルは "frozen" とみなされます。つまり,対応する選択基準が削除されるまで,同じコンテキスト・シンボルでは F$CONTEXT を再び呼び出すことができません。同じコンテキスト・シンボルに追加の選択基準を設定しようとすると,エラー・メッセージが表示されますが,コンテキストと選択基準には影響しないため F$PID 関数の呼出しは続けることができます。

F$CONTEXT は,プロセス・メモリを使用して選択基準を格納します。ある 2 つの状況では,このメモリが削除されます。 F$PID 関数を呼出して空文字 ("") が戻されたとき,つまり選択基準に合う全てのプロセスが戻された場合と,呼出しの際に CANCEL というキーワードをコンテキストとともに使用した場合です。このタイプの呼出しは Ctrl/Y 操作や他の条件処理ルーチンに適しています。


#1

$!Establish an error and CTRL/Y handler 
 
     $ ON ERROR THEN GOTO error 
     $ ON CONTROL_Y THEN GOTO error 
     $! 
     $ ctx = "" 
     $ temp = F$CONTEXT ("PROCESS", ctx, "NODENAME", "*","EQL") 
     $ temp = F$CONTEXT ("PROCESS", ctx, "USERNAME", "M*,SYSTEM","EQL") 
     $ temp = F$CONTEXT ("PROCESS", ctx, "CURPRIV", "SYSPRV,OPER", "ALL") 
     $!Loop over all processes that meet the selection criteria. 
     $!Print the PID and name of the image for each such process. 
 
     $loop: 
     $ pid = F$PID(ctx) 
     $ IF pid .EQS. "" 
     $ THEN 
     $     GOTO endloop 
     $ ELSE 
     $     image = F$GETJPI(pid,"IMAGNAME") 
     $     SHOW SYMBOL pid 
     $     WRITE SYS$OUTPUT image 
     $     GOTO loop 
     $ ENDIF 
     $!The loop over the processes has ended. 
 
     $endloop: 
     $ EXIT 
     $! 
     $!Error handler. Clean up the context's memory with the CANCEL 
     $!selection item keyword. 
     $! 
     $error: 
     $ IF F$TYPE(ctx) .eqs. "PROCESS_CONTEXT" THEN - 
      temp = F$CONTEXT ("PROCESS", ctx, "CANCEL") 
 
     $ EXIT 
 

この例では,選択基準を設置するために F$CONTEXT が 3 回呼び出されています。最初の呼び出しは,クラスタ内の全ノードを探索するよう指定しています。次の呼出しでは,ユーザ名が "M" で始まるか "SYSTEM" であるプロセスのみを対象とすることを指定しています。最後の呼出しでは, SYSPRV と OPER 特権の両方を持っているプロセスを選択することを指定しています。

ラベル "loop" と "endloop" で囲まれたコマンド行は, F$CONTEXT で設定した選択基準に合うプロセスを処理するため連続して F$PID を呼んでいます。各 PID を検索した後,そのプロセスが実行しているイメージ名を得るため F$GETJPI を呼び出しています。最後に,このプロシージャはイメージの名前を表示します。

エラーの場合,または CTRL/Y が押された場合は,制御は error に移され,( 必要であれば ) コンテキストがクローズされます。ここで,シンボル・タイプが PROCESS_CONTEXT であるか検査している点に注意してください。シンボル・タイプが PROCESS_CONTEXT であれば,選択基準は F$CONTEXT を使用して取り消さなければなりません。シンボル・タイプが PROCESS_CINTEXT ではない場合は,選択基準が設定されなかったか,または,F$PID 実行中にエラーが起きたかプロセス・リストが全て使用されたか,のいずれかです。

#2

f$context("process",ctx,"prcnam  ","symbiont*,mcote*","eql")
f$context("process",ctx,"prcnam  ","symbiont*,mcote* ","neq")
f$context("process",ctx,"prcnam  ","mcote* ","neq")
f$context("process",ctx,"prcnam  ","symbiont*","neq")
 

この例では EQL と NEQ 選択値の違いを表す構文が 3 つ示してあります。最初の関数 ( EQL を指定 ) はプロセス名に symbiont と mcote を含むすべてのプロセスを戻します。2 番目と 3 番目の関数 ( NEQ を指定 ) は全てのプロセス ( プロセス名に symbiont がない,または mcote がないプロセス ) を戻すことに相当します。


前へ 次へ 目次 索引