Go to main content
リソース管理および Oracle® Solaris ゾーン開発者ガイド

印刷ビューの終了

更新: 2016 年 11 月
 
 

libexacct に対する Perl インタフェース

Perl インタフェースのオブジェクトモデル

Sun::Solaris::Exacct モジュールは、libexacct(3LIB) ライブラリが提供するすべてのクラスの親です。libexacct(3LIB) で操作できるエンティティーのタイプは、exacct 形式ファイル、catalog タグ、および exacct オブジェクトです。exacct オブジェクトはさらに 2 つのタイプに分類できます。

  • アイテム – 単一データ値

  • グループ – アイテムのリスト

libexacct に Perl インタフェースを使用する利点

拡張アカウンティングへの Perl 拡張によって、ベースとなる libexacct(3LIB) API に Perl インタフェースが追加され、次の拡張機能を使用できるようになります。

  • ベースとなる C API と機能的に同等な Perl インタフェースを提供する C API と完全に同等になる。

    このインタフェースは、C コーディングを必要としない exacct ファイルにアクセスするためのメカニズムを提供します。C から使用できるすべての機能は、Perl インタフェースからも使用できます。

  • 使いやすさ。

    ベースとなる C API から取得したデータを Perl データ型として表示します。Perl データ型を使用すると、データへのアクセスが容易になり、またバッファーでのパックとアンパックの操作が不要になります。

  • 自動メモリー管理。

    C API では exacct ファイルにアクセスする場合、プログラマがメモリー管理の責任を持つ必要があります。メモリー管理には、ea_unpack_object(3EXACCT) などの関数に適切なフラグを渡し、API に渡すバッファーを明示的に割り当てることなどが含まれます。Perl API では、すべてのメモリー管理が Perl ライブラリによって実行されるため、これらが必要ありません。

  • 誤った API の使用を防ぐ。

    ea_object_t 構造体は、exacct レコードのメモリー内表現を提供します。ea_object_t 構造体は、グループレコードとアイテムレコードの両方の操作に使用する共用型です。その結果、誤った型の構造体が一部の API 関数に渡されることがあります。クラス階層を追加することで、このタイプのプログラミングエラーを防止できます。

Perl double 型のスカラー

このドキュメントで説明するモジュールは、Perl double 型スカラー機能を広範囲に使用します。double 型のスカラー機能を使用した場合、スカラー値がコンテキストに応じて整数または文字列として動作します。この動作は、$! Perl 変数 (errno) で示されるものと同じです。double 型のスカラー機能を使用すると、値を表示するために整数値を対応する文字列にマッピングする必要がなくなります。次の例は、double 型スカラーの使用を示しています。

# Assume $obj is a Sun::Solaris::Item
my $type = $obj->type();

# prints out "2 EO_ITEM"
printf("%d %s\n", $type, $type);

# Behaves as an integer, $i == 2
my $i = 0 + $type;

# Behaves as a string, $s = "abc EO_ITEM xyx"
my $s = "abc $type xyz";