前へ | 次へ | 目次 | 索引 |
ファイル指定を解析し,拡張ファイル指定,またはユーザが指定した特定のファイル指定フィールドを戻します。
F$PARSE (ファイル指定 [,省略時のファイル指定] [,関連ファイル指定] [,フィールド] [,解析タイプ])
解析中にエラーを検出した場合, F$PARSE 関数はたいてい空文字列 ("") を返します。たとえば,ファイル指定が間違った構文である場合や,指定したディスクやディレクトリが存在しない (結果としてファイル指定が論理的に間違っている)場合は,空文字列が返されます。ただし,フィールド名を指定する,または解析タイプに SYNTAX_ONLY を指定すると,適切な情報が返されます。
ファイル指定
解析するファイル指定を含む文字列を指定します。ファイル指定にはワイルドカード文字を使用できます。この場合,F$PARSE により戻されるファイル指定もワイルドカード文字を含んでいます。
省略時のファイル指定
省略時のファイル指定を含む文字列を指定します。ファイル指定 引数で省略されているフィールドがあると,省略時のファイル指定の対応するフィールドで置換されます。この結果,まだ省略されているフィールドは, 関連ファイル指定引数の対応するフィールドで置換されます。
関連ファイル指定
関連するファイル指定を含む文字列を指定します。ファイル指定 引数と 省略時のファイル指定 引数の両方で,省略されているフィールドがあると,関連ファイル指定の対応するフィールドで置換されます。
フィールド
ファイル指定のフィールド名を含む文字列を指定します。この引数を指定すると,F$PARSE 関数は,ファイル指定の特定の部分を戻します。次のフィールド名のいずれか 1 つを指定できます(省略することはできません)。
NODE ノード名 DEVICE 装置名 DIRECTORY ディレクトリ名 NAME ファイル名 TYPE ファイル・タイプ VERSION ファイル・バージョン番号
解析タイプ
実行される解析タイプを指定します。省略時の設定では,F$PARSE 関数は,ファイル指定で指定したディレクトリが,ファイル指定で指定した装置上に存在するかどうか確認します。ただし,フィールド 引数を指定した場合は,ディレクトリの存在は確認しません。装置とディレクトリは,引数の1つに明示的に指定できます。また,省略しても省略時の値として使用されます。また,省略時の設定で F$PARSE 関数は,他の引数として指定されている論理名があると,そのは論理名を変換します。 CONCEALED 属性を持つ論理名を検出すると,F$PARSE 関数は,反復変換を停止します。
次のキーワードを使用すると, F$PARSE 関数がファイル指定を解析する方法を変更できます。
NO_CONCEAL ファイル指定の一部に指定された論理名変換時に,"conceal" 属性を無視する。つまり,隠し論理名が検出されても,論理名変換は終了しない。 SYNTAX_ONLY ファイル指定の構文だけをチェックし,指定したディレクトリが装置上に確認するかどうかは確認しない。
F$PARSE 関数は,RMS サービスの $PARSE を使用して,ファイル指定を解析します。 $PARSE についての詳細は,『OpenVMS Record Management Services Reference Manual』を参照してください。F$PARSE 関数を使用する場合,最後に指定した引数の後ろに指定するオプションの引数を省略することができます。ただし,最後に指定する引数の前(左)に指定するオプションの引数を省略する場合は,プレースホルダーとしてコンマ(,)を入れます。
ファイル指定引数で装置名およびディレクトリ名を省略すると, F$PARSE 関数は,まず省略時のファイル指定引数,次に 関連ファイル指定引数から,省略時設定の名前を補います。どちらの引数からも名前を得られない場合は,現在の省略時の設定を使用します。
ノード名,ファイル名,ファイル・タイプ,またはバージョン番号を省略すると, F$PARSE 関数は,まず 省略時のファイル指定引数,次に 関連ファイル指定 引数から省略時設定を補います (ただし,関連ファイル指定 引数からは,バージョン番号を補えない点に注意してください)。どちらの引数からも名前を与えられない場合は, F$PARSE はこれらのフィールドに空指定を戻します。
#1 |
---|
$ SET DEF DISK2:[FIRST] $ SPEC = F$PARSE("JAMES.MAR","[ROOT]",,,"SYNTAX_ONLY") $ SHOW SYMBOL SPEC SPEC = "DISK2:[ROOT]JAMES.MAR;" |
この例では,F$PARSE 関数は, JAMES.MAR というファイルの拡張ファイル指定を戻します。この例では,SYNTAX_ONLY キーワードを指定し, F$PARSE 関数は構文だけを調べ,[ROOT]ディレクトリが DISK2 に存在するかどうかは調べないよう指定しています。
省略時の装置とディレクトリは,DISK2:[FIRST] です。割り当て文の 省略時のファイル指定 引数に [ROOT]ディレクトリが指定されているので, [ROOT]ディレクトリは出力文字列のディレクトリ名として使用されます。出力文字列に戻される省略時の装置は DISK2 であり,このファイルの省略時のバージョン番号は空文字です。 JAMES.MAR と ROOT という引数は文字列リテラルなので,引用符("")で囲まなければなりません。
構文だけの解析をするように指定せず,しかも[ROOT]が DISK2 に存在しない場合には,空文字列が戻されます。
#2 |
---|
$ SET DEFAULT DB1:[VARGO] $ SPEC = F$PARSE("INFO.COM",,,"DIRECTORY") $ SHOW SYMBOL SPEC SPEC = "[VARGO]" |
この例では, F$PARSE 関数は, INFO.COM というファイルのディレクトリ名を戻します。引数リストで 省略時のファイル指定 引数と 関連ファイル指定 引数が省略されているので,それぞれの位置にコンマ (,) を指定しなければなりません。
#3 |
---|
$ SPEC= F$PARSE("DENVER::DB1:[PROD]RUN.DAT",,,"TYPE") $ SHOW SYMBOL SPEC SPEC = ".DAT" |
この例では,F$PARSE 関数を使用して,ノード名を含むファイル指定を解析しています。 F$PARSE 関数は,DENVER という遠隔ノードの, RUN.DATというファイルのファイル・タイプである,DAT を戻します。
プロセス識別番号(PID)を戻し,システムのプロセス・リストで現在の位置を指すようコンテキスト・シンボルを変更します。
F$PID (コンテキスト・シンボル)
コンテキスト・シンボル
システムのプロセス・リストを示すポインタを格納するために, DCL が使用するシンボルを指定します。 F$PID 関数は,このポインタを使用して PID を戻します。シンボルを使用して,コンテキスト・シンボルを指定します。コマンド・プロシージャ内で最初に F$PID 関数を使用する時は,シンボルは未定義のシンボル,空文字列("")が割り当てられたシンボル,または F$CONTEXT 関数で設定されたコンテキスト・シンボルを使用します。
コンテキスト・シンボルが未定義または空文字列が割り当てられた場合は, F$PID 関数は,スステムのプロセス・リスト中で,アクセス特権を持つ最初の PID を戻します。つまり,ユーザが GROUP 特権を持ち,コテキスト・シンボルが未定義または空文字列が割り当てられた場合は, F$PID 関数は,ユーザのグループで最初のプロセスの PID を戻します。ユーザが WORLD 特権を持っている場合は,F$PID 関数は,リストで最初のプロセスの PID を戻します。ユーザが GROUP 特権も WORLD 特権もない場合は,F$PID 関数は,該当ユーザが所有している最初のプロセスの PID を戻します。後続の F$PID 呼び出しは,ユーザがアクセスしているシステム上の他のプロセスを戻します。
コンテキスト・シンボルが F$CONTEXT 関数により設定されている場合, F$PID 関数は, F$CONTEXT 呼び出しで指定した選択基準に一致する,システムのプロセス・リストで最初のプロセスを戻します。後続の F$PID 呼び出しは, F$CONTEXT 関数により設定された選択基準に一致し,ユーザの現在の特権でアクセスできるプロセスの PID だけを戻します。
F$PID 関数は,プロセス識別番号 (PID) を戻し,システムのプロセス・リストでの現在の位置を指すようコンテキスト・シンボルを変更します。システム上のすべてのプロセスを使用することもできますし, F$CONTEXT 関数を使用して選択基準を指定することもできます。 F$CONTEXT 関数は必須ではありません。F$PID が戻すプロセス識別番号 (PID) は,ユーザのプロセスが持つ特権に応じて異なります。ユーザのプロセスが GROUP 特権を持っている場合は,グループ内のプロセスの PID が戻されます。ユーザのプロセスが WORLD 特権を持っている場合は,システム上のすべてのプロセスの PID が戻されます。いずれの特権も持たない場合は,該当ユーザが所有しているプロセスの PID だけが戻されます。
F$CONTEXT 関数は F$PID 関数がデュアル・アーキテクチャ OpenVMS Cluster システムのどのノードからもプロセスを検索できるようにします。
最初に F$PID を使用するときには,未定義なシンボル,空文字列が割り当てられたシンボル,または F$CONTEXT で作成したコンテキスト・シンボルを指定してください。これにより F$PID 関数は,ユーザがアクセス権を没,システムのプロセス・リストで最初の PID を戻します。また,F$PID 関数は コンテキスト・シンボル 引数を初期化します。
一度 コンテキスト・シンボル 引数が初期化されると,後続の F$PID は, F$CONTEXT で設定した選択基準を使用して順々に PID を戻します。そして,コンテキスト・シンボルがあれば,これを更新します。次に取り出す PID が無くなると, 空文字列が戻されます。プロセシ・リストの最後の PID を戻した後は, F$PID 関数は空文字列を戻します。
#1 |
---|
$ CONTEXT = "" $ START: $ PID = F$PID(CONTEXT) $ IF PID .EQS. "" THEN EXIT $ SHOW SYMBOL PID $ GOTO START |
このコマンド・プロシージャは,F$PID 関数を使用して, PID のリストを表示しています。割り当てステートメントは,CONTEXT というシンボルを宣言しています。このシンボルは, F$PID 関数に対する コンテキスト・シンボル引数として使用されます。 CONTEXT には空文字列が割り当てられているので, F$PID 関数は,アクセス権がある,プロセス・リストで最初の PID を戻します。
このコマンド・プロシージャで表示される PID は,プロセスの持つ特権に応じて異なります。 GROUP 特権を持つ場合には,グループに含まれるユーザの PID が表示されます。 WORLD 特権を持つ場合には,システムのすべてのユーザの PID が表示されます。 GROUP 特権も WORLD 特権も持たない場合には,該当ユーザが所有しているプロセスの PID だけが表示されます。
現在のプロセス特権が,引数に指定されている特権と一致するかどうかに応じて, TRUE または FALSE という文字列値を戻します。特権の肯定形,および否定形のいずれも指定できます。
F$PRIVILEGE (特権)
特権
特権,またはコンマ(,)で区切られた特権のリストを含む文字列を指定します。プロセス特権のリストについては,『OpenVMS Guide to System Security』を参照してください。 [NO]ALL を除く,任意のプロセス特権を 1 つ指定します。
F$PRIVILEGE 関数を使用して,ユーザの現在のプロセスに関する特権を識別します。特権の前に "NO" が付いている場合は,関数が TRUE を戻すよう,その特権は無効になります。 F$PRIVILEGE 関数はリストのキーワードをそれぞれチェックし, 1 つでも偽があれば FALSE を戻します。
#1 |
---|
$ PROCPRIV = F$PRIVILEGE("OPER,GROUP,TMPMBX,NONETMBX") $ SHOW SYMBOL PROCPRIV PROCPRIV = "FALSE" |
この例では,F$PRIVILEGE 関数を使用して,プロセスが OPER 特権,GROUP 特権,および TMPMBX 特権を持っているか,またユーザが NETMBX 特権を持っていないかを調べています。
この例に示されているプロセスは,OPER (オペレータ) 特権,GROUP 特権, TMPMBX (一時メールボックス) 特権,および NETMBX (ネットワーク・メールボックス) 特権のすべてを持っています。したがって,プロセスが NETMBX 特権を持っていますが, priv-state リストに NONETMBX が指定されているため, FALSE が戻されます。他の 3 つのキーワードの論理演算の結果は真ですが, NONETMBXの結果が偽であるため,この式全体は偽であると評価されます。
現在のプロセス名文字列を得るために使用します。 F$PROCESS 関数では引数は必要ありませんが,括弧は指定しなければなりません。
F$PROCESS()
なし。
#1 |
---|
$ NAME = F$PROCESS() $ SHOW SYMBOL NAME NAME = "MARTIN" |
この例では,F$PROCESS 関数は現在のプロセス名を戻し,その名前が,NAME というシンボルに割り当てられます。
ディレクトリ・ファイルを検索し,指定したファイルの完全ファイル指定を戻します。
F$SEARCH (ファイル指定[,ストリーム id])
ファイル指定
検索するファイル指定を含む文字列を指定します。装置名またはディレクトリ名を省略する場合には, F$SEARCH 関数は,現在の省略時のディスクおよびディレクトリを,省略時の値として使用します。しかし F$SEARCH 関数は,ファイル名またはファイル・タイプに対して省略時の値を補いません。バージョン番号を省略する場合には,F$SEARCH 関数は,最高のバージョン番号を持つファイルのファイル指定を戻します。 ファイル指定 引数でワイルドカード文字を使用すると, F$SEARCH 関数を呼び出すたびに, ファイル指定 引数に当てはまる次のフィアル指定が戻されます。 ファイル指定 引数に当てはまる最後のファイル指定が戻された後は,空文字列が戻されます。ストリーム id
検索ストリーム識別番号を示す,正の整数を指定します。F$SEARCH 関数を 2回以上使用し,それぞれに異なる ファイル指定引数を指定したい場合は,検索ストリーム識別番号を使用して,それぞれの検索コンテキストを管理します。コマンド・プロシージャの中で F$SEARCH 関数を 2回以上使用し,異なる ファイル指定引数を使用する場合には,各検索を別々に識別するために,ストリーム id 引数を指定します。
ストリーム id引数を省略すると,F$SEARCH 関数は,異なる ファイル指定 引数が指定されるたびに,ディレクトリ・ファイルの先頭から検索を開始します。
F$SEARCH レキシカル関数は,RMS サービスの $SEARCH を呼び出し,ディレクトリ・ファイルを検索し,指定したファイルの完全ファイル指定を戻します。 F$SEARCH 関数を使用すると, $SEARCH RMS サービスを使用して,ディレクトリ内のファイルを検索できます。 $SEARCH ルーチンについての詳細は,『OpenVMS Record Management Services Reference Manual』を参照してください。コマンド・プロシージャ内のループで F$SEARCH 関数を使用すると,ワイルドカード文字を含む ファイル指定 引数と一致するファイルすべてのファイル指定を戻すことができます。F$SEARCH 関数が実行されるたびに,ワイルドカード文字を含むファイル指定に一致する,次のファイル指定が戻されます。次に戻すファイル指定がなくなると,空文字列が戻されます。ループ内で F$SEARCH 関数を使用する場合は, ファイル指定引数にワイルドカード文字を使用しなければなりません。ワイルドカード文字を使用しない場合は, F$SEARCH 関数は常に同じファイル指定を戻します。
次のいずれかの方法を使用して,検索ストリームのコンテキストを維持する必要があります。
- ストリーム id 引数を指定し,明示的に維持する。
- ストリーム id 引数を省略し, F$SEARCH 関数を実行するたびに同じ ファイル指定 引数を使用して,暗黙に維持する。
検索ストリームのコンテキストを維持しない場合は,異なる ファイル指定 引数を指定するたびに,ディレクトリ・ファイルの先頭から新しい検索を開始することになります。
注意
レキシカル関数 F$SEARCH は,ユーザが指定した選択基準に一致したすべてのファイルを戻すことができます。また,検索開始時から検索終了時までの間の任意の時点でディレクトリに存在するすべてのファイルを戻すことができます。検索中に作成,リネーム,または削除されたファイルは,戻されないことがあります。
#1 |
---|
$ START: $ FILE = F$SEARCH("SYS$SYSTEM:*.EXE") $ IF FILE .EQS. "" THEN EXIT $ SHOW SYMBOL FILE $ GOTO START |
このコマンド・プロシージャは,SYS$SYSTEM ディレクトリにある,すべての .EXE ファイルの最新バージョンのファイル指定を表示します (バージョン番号にアスタリスク(*)が使用されていないので,最新バージョンだけが表示されます)。 filespec引数である SYS$SYSTEM:*.EXEは文字列式なので,引用符 (" ") で囲んでいます。
stream-id 引数が指定されていないため, F$SEARCH 関数は 1 つの検索ストリームを使用します。後続の F$SEARCH 呼び出しは,同じ filespec 引数を使用して, SYS$SYSTEM から .EXE ファイルの次のファイル指定を戻します。各 .EXE ファイルの最新バージョンが表示された後は, F$SEARCH 関数は空文字列を戻し,このプロシージャは終了します。
#2 |
---|
$ START: $ COM = F$SEARCH ("*.COM;*",1) $ DAT = F$SEARCH ("*.DAT;*",2) $ SHOW SYMBOL COM $ SHOW SYMBOL DAT $ IF (COM.EQS. "") .AND. (DAT.EQS. "") THEN EXIT $ GOTO START |
このコマンド・プロシージャは,.COM ファイルと .DAT ファイルの両方の省略時のディスクおよびディレクトリを検索します。各検索のコンテキストが維持されるように,各 F$SEARCH 関数に対して stream-id 引数が指定されている点に注意してください。
最初の F$SEARCH 関数は,ファイル・タイプが .COM であるファイルの検索を,ディレクトリ・ファイルの先頭から開始します。 .COM ファイルが検出されると,検索コンテキストを維持するためにポインタが設定されます。 F$SEARCH 関数をもう一度実行すると,ファイル・タイプが .DAT であるファイルの検索を,ディレクトリ・ファイルの先頭から開始します。このプロシージャがループを実行して,START というラベルに戻ると,各 F$SEARCH 関数は stream-id 引数を使用して,ディレクトリ・ファイルの正しい位置から検索を開始します。 .COM ファイルと .DAT ファイルのすべてのバージョンが戻された後,このプロシージャは終了します。
#3 |
---|
$ FILESPEC = F$SEARCH("TRNTO""SMITH SALLY""::DKA1:[PROD]*.DAT") $ SHOW SYMBOL FILESPEC FILESPEC = "TRNTO"smith password"::DKA1:[PROD]CARS.DAT" |
この例では,F$SEARCH 関数を使用して,遠隔ノードのファイルのファイル指定を戻しています。アクセス制御文字列は, F$SEARCH 関数に対する引数として文字列式の一部で使用されているため,二重引用符で囲まれています。文字列式に引用符含める場合は,二重引用符を 2 つ重ねて指定する必要があります。
F$SEARCH 関数が,アクセス制御文字列を含むノード名を戻す場合は,実際のユーザのパスワードが "password" という単語に置き換えられます。
前へ | 次へ | 目次 | 索引 |