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 已拒绝许可权。 该用户不是特权用户。