addprojdb 子例程
用途
将项目定义添加到指定的项目数据库。
库
libaacct.a 库。
语法
<sys/aacct.h>
addprojdb(void *handle, struct project *project, char *comment)描述
addprojdb 子例程将存储在 struct project 变量中的项目定义附加到由 handle 参数指定的项目数据库中。 在调用此子例程之前,必须初始化项目数据库。 为此目的提供了 projd气球 子例程。 此例程验证提供的项目定义是否已存在。 如果它确实存在,那么 addprojdb 子例程会将 errno 设置为 EEXIST 并返回 -1。
addprojdb 子例程验证输入项目号以确保它在期望的范围 0x00000001 - 0x00ffffff 内,并验证项目名称是否是符合 POSIX的字母数字字符串。 如果找到任何无效输入,那么 addprojdb 子例程将 errno 设置为 EINVAL 并返回 -1。
如果用户没有特权向项目数据库添加条目,那么 addprojdb 子例程将 errno 设置为 EACCES 并返回 -1。
存在与项目数据库关联的内部状态 (即,当前项目)。 初始化项目数据库时,当前项目是数据库中的第一个项目。 addprojdb 子例程将指定的项目追加到数据库的末尾。 它将当前的项目分配推进到数据库中的下一个项目,即项目数据库的结束。 此时,对 getnextprojdb 子例程的调用将失败,因为没有其他项目定义。 要读取刚刚添加的项目定义,请使用 getprojdb 子例程。 要读取其他项目,请首先调用 getfirstprojdb 子例程以重置内部当前项目分配,以便可以执行后续读取。
添加到项目数据库的记录的格式如下所示:
ProjectName:ProjectNumber:AggregationStatus:Comment::例如:
Biology:4756:no:Project Created by projctl command::参数
| 项 | 描述 |
|---|---|
| 句柄 (handle) | 指向项目数据库句柄的指针 |
| project | 指向用于保存要添加的项目的定义的项目结构的指针 |
| comment | 指向用于保存有关项目的注释的字符串的指针 |
安全性
仅适用于特权用户。 通过向用户授予 CAP_AACCT 功能,可以将特权扩展至非 root 用户。
返回值
| 项 | 描述 |
|---|---|
| 0 | 成功 |
| -1 | 失败 |
错误代码
| 项 | 描述 |
|---|---|
| EINVAL | 项目名称或编号无效,或者传递的指针为 NULL。 |
| EEXIST | 项目定义已存在。 |
| EPERM | 已拒绝许可权。 该用户不是特权用户。 |