前へ | 次へ | 目次 | 索引 |
指定した利用者特権を許可または禁止します。 F$SETPRV 関数は,利用者特権を示すキーワードのリストを戻します。このリストには, F$SETPRV 関数が実行される前の指定した特権に関する状態が表示されます。特権を許可または禁止するためには,指定された特権を変更できるように設定されていなければなりません。
特権の制限事項についての詳細は,『OpenVMS System Services Reference Manual』の $SETPRV システム・サービスの説明を参照してください。
F$SETPRV (特権)
特権
特権,またはコンマ (,) で区切られた特権のリストを定義する,文字列式を指定します。プロセス特権のリストについての詳細は,『OpenVMS ユーザーズ・マニュアル』を参照してください。
レキシカル関数 F$SETPRV は,$SETPRV システム・サービスを呼び出し,指定した利用者特権を許可または禁止します。 $SETPRV 関数は,利用者特権を示すキーワードのリストを戻します。このリストには, F$SETPRV 関数が実行される前の指定した特権の状態が表示されます。特権 引数に指定した特権を変更することが許可されているかいないかに関わらず,F$SETPRV 特権は,ユーザの現在の特権に関するキーワードを戻します。ただし,F$SETPRV 関数が許可または禁止するのは,変更することを許可されている特権だけです。
F$SETPRV 関数を含むプログラムまたはプロシージャを実行する場合は, F$SETPRV 関数が,ユーザのプロセスを適正な特権状態に復元しているかを必ず確認してください。詳細は,以下の例を参照してください。
#1 |
---|
$ OLDPRIV = F$SETPRV("OPER,NOTMPMBX") $ SHOW SYMBOL OLDPRIV OLDPRIV = "NOOPER,TMPMBX" |
この例では,プロセスは OPER 特権および TMPMBX 特権を変更できる権限が与えられています。 F$SETPRV 関数は OPER 特権を許可し,TMPMBX 特権を禁止します。さらに F$SETPRV 関数は,変更する前のこれらの特権の状態を示すために, NOOPER と TMPMBX というキーワードを戻します。
特権キーワードのリストは文字列リテラルなので,引用符 ("") で囲まなければなりません。
#2 |
---|
$ SHOW PROCESS/PRIVILEGE 05-JUN-2001 15:55:09.60 RTA1: User: HELRIEGEL Process privileges: Process rights identifiers: INTERACTIVE LOCAL $ NEWPRIVS = F$SETPRV("ALL, NOOPER") $ SHOW SYMBOL NEWPRIVS NEWPRIVS = "NOCMKRNL,NOCMEXEC,NOSYSNAM,NOGRPNAM,NOALLSPOOL, NOIMPERSONATE,NODIAGNOSE,NOLOG_IO,NOGROUP,NOACNT,NOPRMCEB, NOPRMMBX,NOPSWAPM,NOALTPRI,NOSETPRV,NOTMPMBX,NOWORLD,NOMOUNT, NOOPER,NOEXQUOTA,NONETMBX,NOVOLPRO,NOPHY_IO,NOBUGCHK,NOPRMGBL, NOSYSGBL,NOPFNMAP,NOSHMEM,NOSYSPRV,NOBYPASS,NOSYSLCK,NOSHARE, NOUPGRADE,NODOWNGRADE,NOGRPPRV,NOREADALL,NOSECURITY,OPER" $ SHOW PROCESS/PRIVILEGE 05-JUN-2001 10:21:18.32 User: INAZU Process ID: 00000F24 Node: TOKNOW Process name: "_FTA23:" Authorized privileges: NETMBX SETPRV SYSPRV TMPMBX Process privileges: ACNT may suppress accounting messages ALLSPOOL may allocate spooled device ALTPRI may set any priority value AUDIT may direct audit to system security audit log BUGCHK may make bug check log entries BYPASS may bypass all object access controls CMEXEC may change mode to exec CMKRNL may change mode to kernel DIAGNOSE may diagnose devices DOWNGRADE may downgrade object secrecy EXQUOTA may exceed disk quota GROUP may affect other processes in same group GRPNAM may insert in group logical name table GRPPRV may access group objects via system protection IMPERSONATE may impersonate another user IMPORT may set classification for unlabeled object LOG_IO may do logical i/o MOUNT may execute mount acp function NETMBX may create network device OPER may perform operator functions PFNMAP may map to specific physical pages PHY_IO may do physical i/o PRMCEB may create permanent common event clusters PRMGBL may create permanent global sections PRMMBX may create permanent mailbox PSWAPM may change process swap mode READALL may read anything as the owner SECURITY may perform security administration functions SETPRV may set any privilege bit SHARE may assign channels to non-shared devices SHMEM may create/delete objects in shared memory SYSGBL may create system wide global sections SYSLCK may lock system wide resources SYSNAM may insert in system logical name table SYSPRV may access objects via system protection TMPMBX may create temporary mailbox UPGRADE may upgrade object integrity VOLPRO may override volume protection WORLD may affect other processes in the world Process rights: INTERACTIVE LOCAL System rights: SYS$NODE_TOKNOW $ NEWPRIVS = F$SETPRV(NEWPRIVS) $ SHOW PROCESS/PRIVILEGE 05-JUN-2001 16:05:07.23 RTA1: User: JERROM Process privileges: OPER operator privilege Process rights identifiers: INTERACTIVE LOCAL |
この例では,DCL コマンドの SHOW PROCESS/PRIVILEGE コマンドを使用して,現在のプロセスに関する特権を表示しています。このプロセスには何も特権がありません。
次に,F$SETPRV 関数を使用して,ALL キーワードを処理し,シンボル NEWPRIVS に記録されている各特権の以前の状態を許可します。次に F$SETPRV 関数は NOOPER キーワードを処理し, OPER の以前の状態を NEWPRIVS に記録し,OPER ( オペレータ ) 特権を禁止します。戻される文字列に OPER 特権が 2 回表示される点に注意してください。最初は NOOPER,次は OPER と表示されます。
SHOW PROCESS/PRIVILEGE コマンドを入力すると,現在のプロセスでは, OPER 特権を除くすべての特権が許可されていることが表示されます。
戻される文字列を F$SETPRV のパラメータとして使用すると,プロセスは OPER 特権が許可されます。これは NEWPRIVS シンボルに OPER コマンドが 2 度表示されたためです。その結果,F$SETPRV は最初のキーワード NOOPER を検索し,特権を無効にします。最終的には NEWPRIVS 文字列内の他のキーワードを処理した後,OPER が表示され, OPER 特権が許可されます。
現在の特権環境を保存するために ALL や NOALL を使用する場合は,次のコマンド・プロシージャを実行して,コマンド・プロシージャのプロセスを変更することをおすすめします。
$ CURRENT_PRIVS = F$SETPRV("ALL") $ TEMP = F$SETPRV("NOOPER")
このプロシージャを使用すると,以前の特権環境に戻すために,コマンド・プロシージャの最後に次のコマンドを指定することができます。
$ TEMP = F$SETPRV(CURRENT_PRIVS)
#3 |
---|
$ SAVPRIV = F$SETPRV("NOGROUP") $ SHOW SYMBOL SAVPRIV SAVPRIV = "GROUP" $ TEST = F$PRIVILEGE("GROUP") $ SHOW SYMBOL TEST TEST = "TRUE" |
この例では,プロセスには GROUP 特権を変更する権限が与えられていません。しかし,F$SETPRV 関数は,GROUP 特権の現在の設定情報を戻します。
F$PRIVILEGE 関数は,プロセスが GROUP 特権を持つかどうかを判断するために使用されています。この関数から戻された TRUE という文字列は, F$SETPRV 関数がこの特権を禁止しようとしたにもかかわらず,プロセスが GROUP 特権を持つことを示しています。
#4 |
---|
$ SHOW PROCESS/PRIVILEGE 05-JUN-2001 15:55:09.60 RTA1: User: KASER Process privileges: AUDIT may direct audit to system security audit log DOWNGRADE may downgrade object secrecy IMPORT may set classification for unlabeled object UPDATE |
これらのプロセスに関する特権は VAX 固有の特権であり, OpenVMS VAX システムの Security Enhancement Service Software (SEVMS) でのみ使用されます。
指定した式に相当する文字列を戻します。
F$STRING (式)
式
F$STRING 関数によって評価される整数または文字列式を指定します。整数式を指定した場合は,F$STRING 関数は,式を評価した後で文字列に変換し,文字列を返します。文字列式を指定した場合は,F$STRING は式を評価した結果を返します。
整数を文字列へ変換する時, F$STRING 関数は 10 進表現を使用し先行の 0 は省略します。負の整数を変換する場合は, F$STRING 関数は,整数を示す文字列の先頭にマイナス記号を付加します。
#1 |
---|
$ A = 5 $ B = F$STRING(-2 + A) $ SHOW SYMBOL B B = "3" |
この例で,F$STRING 関数は,(--2 + A)という整数式の結果を,数値文字列 3 に変換します。まず,F$STRING 関数は,(--2 + A)という式を評価します。シンボル A の値である 5 は,整数式が評価されるときに自動的に置換されます。
整数式が評価されたあと, F$STRING 関数は,式から求められた 3 という整数を文字列の"3"に変換します。この文字列が,シンボル B に割り当てられます。
現在の日付 / 時刻を絶対時間形式で戻します。F$TIME 関数には引数がありませんが,括弧は指定しなければなりません。
F$TIME()
dd-mmm-yyyy hh:mm:ss.cc |
現在の日が 1 〜 9 の場合は,戻される文字列の最初の文字は空白です。文字列のうち時刻の部分は,常に文字列位置 13,つまり文字列の先頭から 12 文字のオフセット位置です。
返される文字列の空白を保持するには,等号 (=) を使用しなければなりません。文字列代入演算子 (:=) を使用すると,先行する空白文字が除かれます。
なし。
#1 |
---|
$ OPEN/WRITE OUTFILE DATA.DAT $ TIME_STAMP = F$TIME() $ WRITE OUTFILE TIME_STAMP |
この例では,F$TIME 関数を使用して,コマンド・プロシージャから作成したファイルに,タイムスタンプを記録する方法を示しています。 OUTFILE は DATA.DAT というファイルの論理名で,このファイルは書き込みのためにオープンされています。 F$TIME 関数は,現在の日付および時刻文字列を戻し,この文字列を, TIME_STAMP というシンボルに割り当てます。 WRITE コマンドは,日付および時刻文字列を OUTFILE に書き込みます。
論理名を変換し,同値名文字列,または要求されている論理名の属性を戻します。
F$TRNLNM (論理名 [,表] [,索引] [,モード] [,ケース] [,項目])
論理名
変換される論理名を含む文字列を指定します。表
論理名を変換するために,F$TRNLNM 関数が検索する論理名テーブル ( 1 つまたは複数 ) 名を含む文字列を指定します。ここで指定する引数は,論理名テーブルまたは論理名テーブルのリストに変換される,論理名でなければなりません。論理名テーブルを指す論理名は,次に示す論理名テーブルのいずれかで定義しなければなりません。
- LNM$SYSTEM_DIRECTORY
- LNM$PROCESS_DIRECTORY
注意
F$TRNLNM 関数を使用した後, CREATE/NAME_TABLE コマンドを使用して論理名テーブルを作成し,それを F$TRNLNM にアクセス可能なプライベート・テーブルにしたい場合は,プライベート・テーブルを含めるよう,テーブル論理名のうちのいずれか 1 つを再定義しなければなりません。通常 F$TRNLNM によって検索されるすべてのテーブルを表示するには,次のコマンドを実行してください。
$ SHOW LOGICAL/STRUCTURE LNM$DCL_LOGICAL
詳細は, CREATE/NAME_TABLE および SHOW LOGICAL コマンドの説明を参照してください。
table パラメータを省略した場合,省略時の設定により LNM$DCL_LOGICAL が使用されます。つまり F$TRNLNM 関数は,論理名 LNM$DCL_LOGICAL の指す論理名テーブルを検索します。 LNM$DCL_LOGICAL が再定義されない限り,F$TRNLNM 関数は,プロセス,ジョブ,グループ,システムの論理名テーブルをこの順序で検索し,最初に一致した同値名を戻します。
索引
論理名が 2 回以上変換された場合,戻される同値名の数を指定します。論理名が定義されていると, インデックスは,名前がリストされた順序で同値名文字列を参照します。インデックスは 0 で始まります。つまり,同値名リストの最初の名前はインデックス 0 によって参照されます。
索引 引数を指定しない場合には,省略時の値として 0 が使用されます。
モード
変換のアクセス・モードを指定します。アクセス・モードは,USER (省略時の設定),SUPERVISOR,EXECUTIVE,または KERNEL のいずれか 1 つを含む文字列で指定します。F$TRNLNM 関数は,モード 引数で指定したアクセス・モードで作成された論理名の検索を開始します。一致する論理名が見つけられないと, F$TRNLNM 関数は,より内側のアクセス・モードで作成された論理名の検索を行い,最初に一致したものを戻します。たとえば,同一名の論理名が 2 つ定義されていて, 1 つは USER アクセス・モードで,もう 1 つは EXECUTIVE アクセス・モードで作成されたと仮定します。モード 引数に USER を指定すると, F$TRNLNM 関数は,エグゼクティブ・モードではなくユーザ・モードの,論理名の同値文字列を戻します。
ケース
実行される変換のタイプを指定します。ケース引数は,変換のケースおよび変換がインターロックされるかどうかの両方を制御します。ケース引数には,CASE_BLIND ( 省略時の設定 ),CASE_SENSITIVE, NONINTERLOCKED ( 省略時の設定 ),INTERLOCKED の任意の組み合わせを指定することができます。
CASE_BLIND を指定すると,F$TRNLNM 関数は,ケースに関わりなく論理名テーブルで論理名を検索し,最初に見つかった論理名を変換して戻します。一致するものが見つからない場合は,この関数は空文字列 ("") を戻します。
CASE_SENSITIVE を指定すると,F$TRNLNM 関数は,論理名 引数に指定したケースの論理名だけを検索します。正確に一致するものが見つからないと, F$TRNLNM 関数は空文字列 ("") を戻します。
INTERLOCKED を指定すると,F$TRNLNM 関数は,進行中のクラスタ単位の論理名のすべての修正が完了するまで実行されません。続いて一致するものが見つかると,変換の結果が返されます。一致するものが見つからないと, F$TRNLNM 関数は空文字列 ("") を戻します。
NOINTERLOCKED を指定すると,F$TRNLNM 関数は直ちに実行されます。一致するものが見つかると,変換の結果が返されます。一致するものが見つからないと, F$TRNLNM 関数は空文字列 ("")を戻します。
項目
指定した論理名に関して, F$TRNLNM 関数が戻す情報のタイプを含む文字列を指定します。次のいずれか 1 つを指定します。
項目 戻される
タイプ戻される情報 ACCESS_MODE 文字列 論理名に対応するアクセス・モード。アクセス・モードは,USER,SUPERVISOR,EXECUTIVE,KERNEL のいずれか 1 つ。 CLUSTERWIDE 文字列 論理名がクラスタ単位の論理名テーブルにある場合は TRUE,そうでない場合は FALSE。 CONCEALED 文字列 論理名が作成されたときに, /TRANSLATION_ATTRIBUTES 修飾子を指定して, CONCEALED 属性を指定した場合は TRUE,そうでない場合は FALSE。 CONCEALED 属性は,隠し論理名を作成するために使用される。 CONFINE 文字列 論理名が制限されている場合は TRUE,そうでない場合は FALSE。論理名が制限されている(TRUE)場合には,論理名はサブプロセスにコピーされない。論理名が制限されていない(FALSE)場合には,その論理名はサブプロセスにコピーされる。 CRELOG 文字列 CRELOG 属性を使用して, $CRELOG システム・サービスまたは $CRELNM システム・サービスにより論理名が作成された場合は TRUE,そうでない場合は FALSE。 LENGTH 整数値 指定された論理名に対応する,同値名の長さを戻す。論理名に複数の同値名が与えられている場合には,F$TRNLNM 関数は,インデックス引数によって指定された名前の長さを戻す。 MAX_INDEX 整数値 論理名に対して定義されている最大のインデックスを戻す。インデックスは,1 つの論理名にいくつの同値名が与えられているかを示す。インデックスは 0 から始まる。つまり,インデックス 0 は,同値名リストの最初の名前を参照する。 NO_ALIAS 文字列 論理名が NO_ALIAS 属性を持つ場合は TRUE,そうでない場合は FLASE。 NO_ALIAS 属性は,同じ名前を持つ論理名を,より外部のアクセス・モードでは作成できないことを示す。 TABLE 文字列 論理名が,論理名テーブルを指す論理名である場合は TRUE,そうでない場合は FLASE。 TABLE_NAME 文字列 論理名が検出されたテーブル名。 TERMINAL 文字列 論理名が作成されたときに, /TRANSLATION_ATTRIBUTES 修飾子を指定して, TERMINAL 属性を指定した場合は TRUE,そうでない場合は FALSE。 TERMINAL 属性は,論理名が反復変換の対象にならないことを示す。 VALUE 文字列 省略時の設定。指定した論理名に対応する同値名を戻す。論理名に複数の同値名が与えられている場合は,F$TRNLNM 関数は,インデックス引数で指定した名前を戻す。
F$TRNLNM レキシカル関数は, $TRNLNM システム・サービスを呼び出して論理名を変換し,同値名文字列,または指定した論理名の要求した属性を戻します。反復変換は行われません。つまり,一度変換された同値名文字列は,それが論理名であるかどうかチェックされません。F$TRNLNM 関数を使用する場合は,最後に指定する引数の右側で使用するオプションの引数は省略できます。ただし,最後に指定する引数の左側で使用するオプションの引数を省略する場合は,プレースホルダとしてコンマ (,) を指定しなければなりません。
コマンド・プロシージャ内で F$TRNLNM 関数を使用すると,論理名の現在の同値名文字列を保存し,後でリストアすることができます。また,論理名が割り当てられているかどうか確認するために使用することもできます。
#1 |
---|
$ SAVE_DIR = F$TRNLNM("SYS$DISK")+F$DIRECTORY() . . . $ SET DEFAULT 'SAVE_DIR' |
この割り当てステートメントは, F$DIRECTORY 関数から戻された値と F$TRNLNM 関数から戻された値を連結し,その結果である文字列を SAVE_DIR というシンボルに割り当てます。この場合 SAVE_DIR シンボルは,完全な装置およびディレクトリ名文字列から構成されます。SYS$DISK という引数は文字列であるため,引用符 (" ") で囲まれています ( コマンド・インタプリタは,引数が二重引用符で囲まれていない限り,英字から始まるすべての引数を,シンボルまたはレキシカル関数として取り扱います )。省略可能な引数は指定されていないため,F$TRNLNM 関数は省略時の値を使用します。
コマンド・プロシージャの最後で,もとの省略時のディレクトリにリセットされます。ディレクトリを元に戻す場合には,シンボル置換を強制的に実行するために, SAVE_DIR というシンボルを一重引用符 (' ') で囲まなければなりません。
#2 |
---|
$ DEFINE/TABLE=LNM$GROUP TERMINAL 'F$TRNLNM("SYS$OUTPUT")' |
この例は,コマンド・プロシージャから抜粋した行です。ここでは,(1) F$TRNLNM 関数を使用して,現在の出力装置の名前を判断し,(2) 同値文字列に基づいて,グループ論理名テーブルにエントリを作成します。SYS$OUTPUT という引数は文字列であるため,二重引用符で囲まなければなりません。
また,この例では,レキシカル関数が強制的に評価されるようにするために, F$TRNLNM 関数自身も一重引用符で囲まなければなりません。引用符で囲まないと,DEFINE コマンドはレキシカル関数を自動的には評価しません。
#3 |
---|
$ RESULT= - _$ F$TRNLNM("INFILE","LNM$PROCESS",0,"SUPERVISOR",,"NO_ALIAS") $ SHOW SYMBOL RESULT RESULT = "FALSE" |
この例では,F$TRNLNM 関数は,論理名 INFILE を定義したプロセス論理名テーブルを検索します。まず,スーパバイザ・モードで作成された論理名 INFILE を検索します。一致するものがない場合は,エグゼクティブ・モードで作成された INFILE を検索します。一致するものがあった場合は, INFILE という名前が NO_ALIAS 属性で作成されたかどうかを判断します。この例の場合, NO_ALIAS 属性は指定されていません。
#4 |
---|
$ foo=f$trnlnm("FOO","LNM$SYSCLUSTER",,,"INTERLOCKED",) |
この例では,論理名 FOO が LNM$SYSCLUSTER テーブル内で INTERLOCKED 方式で検索されて変換が実行されます。すなわち,同一クラスタ内の現在のノード上あるいは別のノード上で進行中のクラスタ単位の論理名のすべての修正は,この変換が実行される前に完了します。これにより,変換が最新の FOO 定義に基づくものであることを保証します。ケース変換が指定されていないので,省略時の設定の CASE_BLIND で実行されます。
#5 |
---|
$ foo=f$trnlnm("FOO","LNM$SYSCLUSTER",,,"INTERLOCKED,CASE_SENSITIVE",) |
この例では,CASE_SENSITIVE および INTERLOCKED 変換の両方を指定します。
前へ | 次へ | 目次 | 索引 |