各种与项目、任务和 exacct 相关的函数已分为多个组,并且每个组都置于单独的 Perl 模块中。每个函数都具有 Sun Microsystems 标准的 Sun::Solaris::Perl 软件包前缀。
表 4–1 Perl 模块| 模块 | 说明 | 
|---|---|
| 提供用于访问以下项目操作函数的功能:getprojid(2)、setproject(3PROJECT)、project_walk(3PROJECT)、getprojent(3PROJECT)、getprojbyname(3PROJECT)、getprojbyid(3PROJECT)、getdefaultproj(3PROJECT)、inproj(3PROJECT)、getprojidbyname(3PROJECT)、setprojent(3PROJECT)、endprojent(3PROJECT)、fgetprojent(3PROJECT)。 | |
| 提供用于访问任务操作函数 settaskid(2) 和 gettaskid(2) 的功能。 | |
| 顶层 exacct 模块。此模块中的函数可访问与 exacct 有关的系统调用 getacct(2)、putacct(2) 和 wracct(2) 以及 libexacct(3LIB) 库函数 ea_error(3EXACCT)。此模块包含各种 exacct EO_*、EW_*、EXR_*、P_* 和 TASK_* 宏的所有常量。 | |
| 提供面向对象的方法,用于访问 exacct 目录标记中的位字段,以及 EXC_*、EXD_* 和 EXD_* 宏。 | |
| 提供面向对象的方法,用于访问以下 libexacct(3LIB) 记帐文件函数:ea_open(3EXACCT)、ea_close(3EXACCT)、ea_get_creator(3EXACCT)、ea_get_hostname(3EXACCT)、ea_next_object(3XACCT)、ea_previous_object(3EXACCT)、ea_write_object(3EXACCT)。 | |
| 提供面向对象的方法,用于访问单个 exacct 记帐文件对象。exacct 对象表示为指定属于相应 Sun::Solaris::Exacct::Object 子类的不透明引用。此模块可细分为两种可能的对象类型:项和组。另外,还提供了用于访问 ea_match_object_catalog(3EXACCT)、ea_attach_to_object(3EXACCT) 函数的方法。 | |
| 提供面向对象的方法,用于访问单个 exacct 记帐文件项。此类型的对象从 Sun::Solaris::Exacct::Object 中继承。 | |
| 提供面向对象的方法,用于访问单个 exacct 记帐文件组。此类型的对象从 Sun::Solaris::Exacct::Object 中继承,并提供了对 ea_attach_to_group(3EXACCT) 函数的访问。组中包含的各项表示为 perl 数组。 | |
| 专用数组类型,用作 Sun::Solaris::Exacct::Object::Group 中的数组类型。 | 
Sun::Solaris::Project 模块可以为与项目相关的系统调用和 libproject(3LIB) 库提供包装。
Sun::Solaris::Project 模块使用与项目相关的头文件中的常量。
| MAXPROJID | 
| PROJNAME_MAX | 
| PROJF_PATH | 
| PROJECT_BUFSZ | 
| SETPROJ_ERR_TASK | 
| SETPROJ_ERR_POOL | 
libexacct(3LIB) API 的 perl 扩展为项目提供了以下函数。
Sun::Solaris::Project 模块不包含类方法。
Sun::Solaris::Project 模块不包含对象方法。
缺省情况下,此模块中不会导出任何内容。可以使用以下标记有选择性地导入此模块中定义的常量和函数。
| 标记 | 常量或函数 | 
|---|---|
| :SYSCALLS | getprojid() | 
| :LIBCALLS | setproject()、activeprojects()、getprojent()、setprojent()、endprojent()、getprojbyname()、getprojbyid()、getdefaultproj()、fgetprojent()、inproj()、getprojidbyname() | 
| :CONSTANTS | MAXPROJID_TASK、PROJNAME_MAX、PROJF_PATH、PROJECT_BUFSZ、SETPROJ_ERR、SETPROJ_ERR_POOL | 
| :ALL | :SYSCALLS、:LIBCALLS、:CONSTANTS | 
Sun::Solaris::Task 模块可以为 settaskid(2) 和 gettaskid(2) 系统调用提供包装。
Sun::Solaris::Task 模块使用以下常量。
| TASK_NORMAL | 
| TASK_FINAL | 
libexacct(3LIB) API 的 perl 扩展为任务提供了以下函数。
Sun::Solaris::Task 模块不包含类方法。
Sun::Solaris::Task 模块不包含对象方法。
缺省情况下,此模块中不会导出任何内容。可以使用以下标记有选择性地导入此模块中定义的常量和函数。
| 标记 | 常量或函数 | 
|---|---|
| :SYSCALLS | settaskid()、gettaskid() | 
| :CONSTANTS | TASK_NORMAL 和 TASK_FINAL | 
| :ALL | :SYSCALLS 和 :CONSTANTS | 
Sun::Solaris::Exacct 模块可以为 ea_error(3EXACCT) 函数和所有的 exacct 系统调用提供包装。
Sun::Solaris::Exacct 模块可提供各种 exacct 头文件中的常量。P_PID、P_TASKID、P_PROJID 以及所有的 EW_*、EP_*、EXR_* 宏都是在模块生成过程中提取的。宏是从 /usr/include 下的 exacct 头文件中提取的,并且会被作为 Perl 常量提供。传递给 Sun::Solaris::Exacct 函数的常量可以是整数值(如 EW_FINAL)或同一变量的字符串表示形式(如 “EW_FINAL”)。
libexacct(3LIB) API 的 perl 扩展为 Sun::Solaris::Exacct 模块提供了以下函数。
| ea_error_str | 
| ea_register_catalog | 
| ea_new_file | 
| ea_new_item | 
| ea_new_group | 
| ea_dump_object | 
ea_error_str() 作为一种便利方式提供,以便避免使用与以下类似的重复代码块:
if (ea_error() == EXR_SYSCALL_FAIL) {
        print("error: $!\n");
} else {
        print("error: ", ea_error(), "\n");
}
Sun::Solaris::Exacct 模块不包含类方法。
Sun::Solaris::Exacct 模块不包含对象方法。
缺省情况下,此模块中不会导出任何内容。可以使用以下标记有选择性地导入此模块中定义的常量和函数。
| 标记 | 常量或函数 | 
|---|---|
| :SYSCALLS | getacct()、putacct()、wracct() | 
| :LIBCALLS | ea_error()、ea_error_str() | 
| :CONSTANTS | P_PID、P_TASKID、P_PROJID 、EW_*、EP_*、EXR_* | 
| :SHORTAND | ea_register_catalog()、ea_new_catalog()、ea_new_file()、ea_new_item()、ea_new_group()、ea_dump_object() | 
| :ALL | :SYSCALLS、:LIBCALLS、:CONSTANTS 和 :SHORTHAND | 
| :EXACCT_CONSTANTS | :CONSTANTS 以及 Sun::Solaris::Catalog、Sun::Solaris::File、Sun::Solaris::Object 的 :CONSTANTS 标记 | 
| :EXACCT_ALL | :ALL 以及 Sun::Solaris::Catalog、Sun::Solaris::File、Sun::Solaris::Object 的 :ALL 标记 | 
Sun::Solaris::Exacct::Catalog 模块可以为用作目录标记的 32 位整数提供包装。该目录标记表示为指定属于 Sun::Solaris::Exacct::Catalog 类的 Perl 对象。可以使用多种方法来处理目录标记中的字段。
所有的 EXT_*、EXC_* 和 EXD_* 宏都是在模块生成过程中从 /usr/include/sys/exact_catalog.h 文件中提取的,并且是作为常量提供的。传递给 Sun::Solaris::Exacct::Catalog 方法的常量可以是整数值(如 EXT_UINT8)或同一个变量的字符串表示形式(如 “EXT_UINT8”)。
libexacct(3LIB) API 的 Perl 扩展为 Sun::Solaris::Exacct::Catalog 模块提供了以下类方法。Exacct(3PERL) 和 Exacct::Catalog(3PERL)
| register | 
| new | 
libexacct(3LIB) API 的 Perl 扩展为 Sun::Solaris::Exacct::Catalog 提供了以下对象类方法。
| value | 
| type | 
| catalog | 
| id | 
| type_str | 
| catalog_str | 
| id_str | 
缺省情况下,此模块中不会导出任何内容。可以使用以下标记有选择性地导入此模块中定义的常量和函数。
| 标记 | 常量或函数 | 
|---|---|
| :CONSTANTS | EXT_*、EXC_* 和 EXD_*。 | 
| :ALL | :CONSTANTS | 
此外,还可以有选择地将使用 register() 函数定义的任何常量导出到调用方软件包中。
Sun::Solaris::Exacct::File 模块可为用于处理记帐文件的 exacct 函数提供包装。该接口面向对象,并且允许创建和读取 exacct 文件。此模块所包装的 C 库调用包括以下各项:
文件的读写方法可用于对 Sun::Solaris::Exacct::Object 对象执行操作。这些方法可执行所有必需的内存管理、压缩、解压缩以及所需的结构转换操作。
Sun::Solaris::Exacct::File 可提供 EO_HEAD、EO_TAIL、EO_NO_VALID_HDR、EO_POSN_MSK 和 EO_VALIDATE_MSK 常量。new() 方法所需的其他常量位于标准的 Perl Fcntl 模块中。表 4–2 介绍了针对 $oflags 和 $aflags 的各种值的 new() 操作。
Sun::Solaris::Exacct::File 模块不包含函数。
libexacct(3LIB) API 的 Perl 扩展为 Sun::Solaris::Exacct::File 提供了以下类方法。
| new | 
下表介绍了 $oflags 和 $aflags 参数组合的 new() 操作。
表 4–2 $oflags 和 $aflags 参数| $oflags | $aflags | 操作 | 
|---|---|---|
| O_RDONLY | 不存在或为 EO_HEAD | 打开以便在文件开头进行读取。 | 
| O_RDONLY | EO_TAIL | 打开以便在文件结尾进行读取。 | 
| O_WRONLY | 已忽略 | 文件必须存在,打开以便在文件结尾进行写入。 | 
| O_WRONLY | O_CREAT | 已忽略 | 如果文件不存在,请创建文件。否则,截断并打开以便进行写入。 | 
| O_RDWR | 已忽略 | 文件必须存在,打开以便在文件结尾进行读取或写入。 | 
| O_RDWR | O_CREAT | 已忽略 | 如果文件不存在,请创建文件。否则,截断并打开以便进行读取或写入。 | 
$oflags 的唯一有效值是 O_RDONLY、O_WRONLY、O_RDWR 或 O_CREAT 的组合。$aflags 用于描述文件中要求对 O_RDONLY 进行的定位。允许使用 EO_HEAD 或 EO_TAIL。如果不存在,则假设使用 EO_HEAD。
libexacct(3LIB) API 的 perl 扩展为 Sun::Solaris::Exacct::File 提供了以下对象方法。
| creator | 
| hostname | 
| next | 
| previous | 
| get | 
| write | 
关闭 Sun::Solaris::Exacct::File。 对于 Sun::Solaris::Exacct::File,不存在显式的 close() 方法。如果未定义或重新指定了文件句柄对象,则将关闭该文件。
缺省情况下,此模块中不会导出任何内容。可以使用以下标记有选择性地导入此模块中定义的常量。
| 标记 | 常量或函数 | 
|---|---|
| :CONSTANTS | EO_HEAD、EO_TAIL、EO_NO_VALID_HDR、EO_POSN_MSK、EO_VALIDATE_MSK。 | 
| :ALL | :CONSTANTS 和 Fcntl(:DEFAULT)。 | 
Sun::Solaris::Exacct::Object 模块可用作两种可能类型的 exacct 对象(项和组)的父对象。exacct Item 是指单个数据值、嵌入的 exacct 对象或原始数据块。进程占用的用户 CPU 时间(秒数)即是一个单个数据值的示例。exacct Group 是指 exacct 项(如特定进程或任务的所有资源使用情况的值)的有序集合。如果需要将组彼此嵌套,则可以将内部组作为封闭组内嵌入的 exacct 对象存储。
Sun::Solaris::Exacct::Object 模块包含对于 exacct 项和组都通用的方法。请注意,Sun::Solaris::Exacct::Object 及其派生的所有类的属性在最初通过 new() 创建后都是只读的。设置为只读的属性可以防止无意中修改属性,进而防止产生不一致的目录标记和数据值。对于只读属性,唯一的例外是用于在组对象内存储项的数组。可以使用常规的 perl 数组运算符来修改此数组。
Sun::Solaris::Exacct::Object 可提供 EO_ERROR、EO_NONE、EO_ITEM 和 EO_GROUP 常量。
Sun::Solaris::Exacct::Object 模块不包含函数。
libexacct(3LIB) API 的 Perl 扩展为 Sun::Solaris::Exacct::Object 提供了以下类方法。
| dump | 
libexacct(3LIB) API 的 Perl 扩展为 Sun::Solaris::Exacct::Object 提供了以下对象方法。
| type | 
| catalog | 
| match_catalog | 
| value | 
缺省情况下,此模块中不会导出任何内容。可以使用以下标记有选择性地导入此模块中定义的常量和函数。
| 标记 | 常量或函数 | 
|---|---|
| :CONSTANTS | EO_ERROR、EO_NONE、EO_ITEM 和 EO_GROUP | 
| :ALL | :CONSTANTS | 
Sun::Solaris::Exacct::Object::Item 模块用于 exacct 数据项。exacct 数据项表示为指定属于 Sun::Solaris::Exacct::Object::Item 类(即 Sun::Solaris::Exacct::Object 类的子类)的不透明引用。可按如下方式将基础的 exacct 数据类型映射到 Perl 类型。
表 4–3 映射到 Perl 数据类型的 exacct 数据类型| exacct 类型 | Perl 内部类型 | 
|---|---|
| EXT_UINT8 | IV(整数) | 
| EXT_UINT16 | IV(整数) | 
| EXT_UINT32 | IV(整数) | 
| EXT_UINT64 | IV(整数) | 
| EXT_DOUBLE | NV(双精度) | 
| EXT_STRING | PV(字符串) | 
| EXT_EXACCT_OBJECT | Sun::Solaris::Exacct::Object 子类 | 
| EXT_RAW | PV(字符串) | 
Sun::Solaris::Exacct::Object::Item 不包含常量。
Sun::Solaris::Exacct::Object::Item 不包含函数。
Sun::Solaris::Exacct::Object::Item 可从 Sun::Solaris::Exacct::Object 基类继承所有的类方法以及 new() 类方法。
| new | 
Sun::Solaris::Exacct::Object::Item 可从 Sun::Solaris::Exacct::Object 基类继承所有的对象方法。
Sun::Solaris::Exacct::Object::Item 不包含任何导出内容。
Sun::Solaris::Exacct::Object::Group 模块用于 exacct 组对象。exacct 组对象表示为指定属于 Sun::Solaris::Exacct::Object::Group 类(即 Sun::Solaris::Exacct::Object 类的子类)的不透明引用。组内的项存储在 Perl 数组中,并且可以通过继承的 value() 方法来访问对数组的引用。这意味着可以使用常规的 Perl 数组语法和运算符来处理组内的各项。该数组的所有数据元素都必须是从 Sun::Solaris::Exacct::Object 类派生的。另外,只能通过添加现有组作为数据项来将组对象彼此嵌套。
Sun::Solaris::Exacct::Object::Group 不包含常量。
Sun::Solaris::Exacct::Object::Group 不包含函数。
Sun::Solaris::Exacct::Object::Group 可从 Sun::Solaris::Exacct::Object 基类继承所有的类方法以及 new() 类方法。
| new | 
Sun::Solaris::Exacct::Object::Group 可从 Sun::Solaris::Exacct::Object 基类继承所有的对象方法以及 new() 类方法。
| as_hash | 
| as_hashlist | 
Sun::Solaris::Exacct::Object::Group 不包含任何导出内容。
Sun::Solaris::Exacct::Object::_Array 类在内部用于强制对置于 exacct 组中的数据项进行类型检查。Sun::Solaris::Exacct::Object::_Array 不应该由用户直接创建。
Sun::Solaris::Exacct::Object::_Array 不包含常量。
Sun::Solaris::Exacct::Object::_Array 不包含函数。
Sun::Solaris::Exacct::Object::_Array 包含内部使用的类方法。
Sun::Solaris::Exacct::Object::_Array 使用 perl TIEARRAY 方法。
Sun::Solaris::Exacct::Object::_Array不包含任何导出内容。