3.3.2. 条件付き (conditional) ステートメント
場合によっては、SystemTap スクリプトの出力が大きすぎることがあるかもしれません。これに対処するには、スクリプトの論理を細分化して、出力をプローブに関連するもしくは有用なものにする必要があります。
これはハンドラーで 条件 を使うことで実行できます。SystemTap は以下のタイプの条件付きステートメントを受け付けます。
- If/Else ステートメント
- 書式は以下のようになります。
if (condition) statement1 else statement2
if (condition) statement1 else statement2Copy to Clipboard Copied! Toggle word wrap Toggle overflow condition式がゼロ以外の場合、statement1が実行されます。condition式がゼロの場合、statement2が実行されます。else節 (elsestatement2) はオプションです。statement1とstatement2は両方とも、ステートメントブロックになります。例3.9 ifelse.stp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例3.9「ifelse.stp」 は、5 秒間にシステムが実行する仮想ファイルシステムの読み込み (vfs_read) と書き込み (vfs_write) 回数をカウントするスクリプトです。この実行時には、プローブした関数の名前が (条件if (probefunc()=="vfs_read")の)vfs_readと一致する場合、スクリプトは変数countreadの値を 1 つ増やします。一致しない場合は、countnonread(else {countnonread ++}) を増やします。 - While ループ
- 書式は以下のようになります。
while (condition) statement
while (condition) statementCopy to Clipboard Copied! Toggle word wrap Toggle overflow conditionがゼロ以外であれば、statement内のステートメントのブロックは実行されます。statementはステートメントブロックであることが多く、conditionが最終的にゼロとなるように値を変更する必要があります。 - For ループ
- 書式は以下のようになります。
for (initialization; conditional; increment) statement
for (initialization; conditional; increment) statementCopy to Clipboard Copied! Toggle word wrap Toggle overflow forループは、単に while ループの短縮形です。以下が同等のwhileループになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- >=
- より大か等しい
- <=
- より小か等しい
- !=
- 等しくない