VIEW
Synopsis
VIEW:pc viewargument V:pc viewargument
viewargument は以下のいずれかになります。
block offset:mode:length:newvalue
引数
pc | オプション — 後置条件式 |
block | 整数として指定されるブロック位置。 |
offset | バイト単位で表される、mode で指定されたメモリ領域内のベース・アドレスからのオフセット。 |
mode | 修正されるデータを計算するために使用される、ベース・アドレスを含むメモリ領域。 |
length | 修正されるデータの長さ。 |
newvalue | メモリの場所に格納される置き換え値。 |
概要
VIEW コマンドは、データベース・ブロックの読み取りや書き込み、メモリ内の場所への書き込みを行います。VIEW には以下の 2 つの引数形式があります。
-
VIEWblock は、Caché データベースとメモリ間でデータを移動させます。
-
VIEWoffset:mode:length:newvalue は、offset、mode、および length で指定されるメモリ位置に newvalue を配置します。
$VIEW 関数を使用して、メモリ内のデータを調べることができます。
VIEW コマンドは使用しないことをお勧めします。どのような環境で使用されても、メモリ構造を破壊する可能性があります。
引数
pc
オプションの後置条件式。Caché は、後置条件式が True (0 以外の数値に評価される) の場合にこのコマンドを実行します。Caché は、後置条件式が False (0 に評価される) の場合はコマンドを実行しません。詳細は、"Caché ObjectScript の使用法" の "コマンド後置条件式" を参照してください。
block
整数として指定されるブロック位置。block が正の整数の場合、VIEW はその番号ブロックを表示バッファに読み取ります。block が負の整数の場合、VIEW は現在の表示バッファのブロックをそのブロック・アドレスに書き込みます。block と offset:mode:length:newvalue 引数は、相互排他的です。
ブロックが既にメモリ・バッファ内にある場合は、バッファ内の現在のコンテンツがコピーされます。
ブロック位置 0 は有効な位置ではありません。VIEW 0 を指定しようとすると、<BLOCKNUMBER> エラーが返されます。
offset
バイト単位で表される、mode で指定されたメモリ領域内のベース・アドレスからのオフセット。
mode
修正されるデータを計算するために使用される、ベース・アドレスを含むメモリ領域。可能な値に関する説明は、"メモリ内のデータの修正" を参照してください。
length
修正されるデータの長さ。
バイト数を整数 1 ~ 4 または 1 ~ 8 で指定します。文字 C または P を使用して、現在のプラットフォームのアドレス・フィールド (ポインタ) のサイズを指定することもできます。
newvalue が文字列を定義している場合は、1 からカウントされる負の整数でバイト数を指定します。newvalue の長さがこの数を上回る場合、Caché は超えた分の文字を無視します。newvalue の長さがこの数を下回る場合、Caché は与えられた文字を保存し、残り部分のメモリ位置は変更されません。
逆順でバイト値を保管 (最低位バイトを最低アドレスに置く) するためには、文字 O を長さを示す数字に追加し、両方を二重引用符で囲みます。
newvalue
メモリの場所に格納される置き換え値
例
以下の例は、Caché データベースの 6 番目のブロックを表示バッファに読み取ります。
VIEW 6
以下の例は、おそらくデータが修正された後に、表示バッファを Caché データベースの元の 6 番目のブロックに書き込みます。
VIEW -6
以下の例は、文字列 " WXYZ" を表示バッファのオフセット ADDR から 4 バイト目にコピーします。$VIEW(ADDR,0,-4) 式の結果は、値 "WXYZ" になります。
VIEW ADDR:0:-4:"WXYZ"
メモ
VIEW の使用には注意が必要
VIEW コマンドの使用には注意が必要です。これは通常、デバッグや Caché データベース、Caché システム情報の修復に使用されます。VIEW の使用法を誤ると、メモリや Caché データベースは、簡単に破壊されます。
VIEW の使用の制限
VIEW コマンドは、制限付きのシステム機能です。呼び出されるコードが CACHESYS データベース内にあるので、コマンドは保護されます。詳細は、"Caché セキュリティ管理ガイド" の "アセットおよびリソース" の章にある “特別な機能” を参照してください。
表示バッファ
データベース・バッファの読み取り、および書き込みに使用された場合、VIEW コマンドは、表示バッファ (デバイス 63) で使用されます。表示バッファは、特殊なメモリ領域です。 VIEW 操作を実行する前に、開いておく必要があります。
表示バッファを (OPEN コマンドを使用して) 開くときは、その表示バッファに関連付けられる Caché データベース (CACHE.DAT) を指定します。VIEW コマンドを使用して、次に Caché データベースから個々のブロックを表示バッファに読み取ることができます。
ブロックを表示バッファに読み取った後、$VIEW 関数を使用してデータを調べることができます。または、VIEW コマンドを使用して、データを修正できます。データを修正した場合は、もう一度 VIEW コマンドを使用して、修正済みのブロックを Caché データベースに書き込むことができます。
Caché データベースでのデータの読み取りや書き込み
VIEW を使用して、Caché データベースのデータ・ブロックを読み取ったり書き込んだりする前に、まず、OPEN コマンドを使用して表示バッファを開きます。
-
表示バッファを開きます。表示バッファは、デバイス番号 63 として指定されています。したがって、コマンドは以下のとおりです。
OPEN 63:location
location には、表示バッファに関連付けられる CACHE.DAT ファイルを含むネームスペースを指定します。location は、実装タイプごとに異なります。OPEN 63 コマンドは、Caché データベースで使用されるブロック・サイズと等しいサイズのシステム・メモリの領域を割り当てることによって、表示バッファを作成します。
-
VIEW block 形式を使用して、関連付けられた Caché データベースからブロックを読み取ります。block には、正の整数を指定します。例えば以下のようになります。
VIEW 4
この例では、Caché データベースの 4 番目のブロックを表示バッファに読み取ります。表示バッファのサイズは、Caché データベースで使用されるブロック・サイズと等しいので、表示バッファには、一度に 1 ブロックしか含めることができません。後に続くブロックを読み取るときには、毎回新しいブロックが現在のブロックを上書きします。Caché データベースからいずれのブロックを読み取るかを決定するには、ファイルの構造に精通していなければなりません。
-
$VIEW 関数でブロックのデータを検証するか、VIEW コマンドでデータを修正します。
-
表示バッファの変更を行った場合は、それを Caché データベースに書き込みます。データを書き込むには、VIEW block 形式を使用しますが、block には、負の整数を指定します。ブロック番号は通常、表示バッファ内の現在のブロック番号と一致しますが、必ずしもその必要はありません。指定されたブロック番号によって、表示バッファ内のブロックで置き換える (上書きする) ファイル内のブロックが識別されます。例えば、VIEW -5 の場合、Caché データベースの 5 番目のブロックが表示バッファの現在のブロックと置き換えられます。
-
CLOSE 63 を使用して、表示バッファを閉じます。
Caché データベース間でのブロック転送
表示バッファを開いても、Caché は自動的に既存のブロックを消去しません。したがって、以下の手順で、Caché データベースからのデータ・ブロックを、他のデータベースに転送することができます。
-
OPEN 63 を使用して、最初の Caché データベースが含まれるネームスペースを指定します。
-
VIEW を使用して、ファイルから目的のブロックを表示バッファに読み取ります。
-
必要に応じて、VIEW を使用して表示バッファ内のデータを修正します。
-
OPEN 63 を使用して、2 番目の Caché データベースが含まれるネームスペースを指定します。
-
VIEW を使用して、表示バッファから 2 番目の Caché データベースにブロックを書き込みます。
-
CLOSE 63 を使用して表示バッファを閉じます。
メモリ内のデータの修正
Caché データベースからのデータの読み取りや書き込み以外に、VIEW コマンドは、表示バッファ内、または他のシステム・メモリ領域のメモリ内にあるデータを修正することができます。
データを修正するには、以下の形式を使用します。
VIEWoffset:mode:length:newvalue
4 つの引数すべてが必須です。
メモリ内の指定した場所に新しい値を格納することで、データを修正します。この場所は、mode で示されたベース・アドレスからのバイト・オフセットで指定されます。length 引数で、影響を受けるメモリの大きさを指定できます。
mode で利用可能な値は、以下のテーブルのとおりです。
モード | メモリ管理領域 | ベース・アドレス |
---|---|---|
n>0 | プロセス n のアドレス空間。n は、そのプロセスに対する $JOB の値、プロセス ID (PID)。 | 0 |
0 | 表示バッファ | 表示バッファの開始位置 |
-1 | プロセスのパーティション | パーティションの開始位置 |
-2 | システム・テーブル | システム・テーブルの開始位置 |
-3 | プロセスのアドレス空間 | 0 |
-6 | インターシステムズ用に確保 | |
-7 | 整合性の確認ユーティリティによってのみ使用 | 特殊。"Caché 高可用性ガイド" を参照してください。 |