下列函数用于获得包文件信息。返回的信息以Header结构的形式保存。
int rpmReadPackageInfo(int fd, Header * signatures, Header * hdr);
使用给定fd(表示对应的rpm包)读入头信息和标记信息。如果指定signatures或hdr,则其对应的信息不返回。
int rpmReadPackageHeader(int fd, Header * hdr, int * isSource, int * major, int * minor);
使用给定fd(表示对应的rpm包)读入头信息,以及此包文件是否是源码包,包的主、次版本号。
4.3 RPM数据库处理
这一节的函数完成RPM数据库的基本操作。这包括打开和关闭数据库,以及在数据库损坏时进行重建。每个存取RPM数据库的函数都要使用rpmdb结构,它是RPM数据库的句柄。
int rpmdbOpen(char * root, rpmdb * dbp, int mode, int perms);
此过程打开环境变量RPMVAR_DBPATH指定的RPM数据库,返回rpmdb结构。
void rpmdbClose(rpmdb db);
此过程关闭rpmdb结构指定的RPM数据库。
int rpmdbInit(char * root, int perms);
此过程在环境变量RPMVAR_DBPATH指定的位置创建一个新的RPM数据库。如果数据库存在,此函数不做任何操作。
int rpmdbRebuild(char * root);
此过程在环境变量RPMVAR_DBPATH处重建RPM数据库。
4.4 RPM数据库遍历
unsigned int rpmdbFirstRecNum(rpmdb db);
此过程返回db指定的数据库第一个记录的记录编号。
unsigned int rpmdbNextRecNum(rpmdb db, unsigned int lastOffset);
此过程返回紧接着lastOffset的记录的编号。
Header rpmdbGetRecord(rpmdb db, unsigned int offset);
此过程返回指定偏移处的记录。
4.5 RPM数据库查询
这一节的函数查询RPM数据库,并且返回dbiIndexSet结构。在不使用此返回值的时候,使用dbiFreeIndexRecord()函数释放。
typedef struct {
dbiIndexRecord * recs;
int count;
} dbiIndexSet;
typedef struct {
unsigned int recOffset;
unsigned int fileNumber;
} dbiIndexRecord;
recOffset是记录在数据库中的偏移,fileNumber仅用于rpmdbFindByFile()。
int rpmdbFindByFile(rpmdb db, char * filespec, dbiIndexSet * matches);
此过程搜索db指定的RPM数据库,找到拥有filespec指定文件的记录,并保存在matches中。
int rpmdbFindByGroup(rpmdb db, char * group, dbiIndexSet * matches);
此过程搜索db指定的RPM数据库,查找是group组指定的成员的包,返回值保存在matches中。
int rpmdbFindPackage(rpmdb db, char * name, dbiIndexSet * matches);
此过程搜索db指定的RPM数据库,查找包名是name的包,返回值保存在matches中。
int rpmdbFindByProvides(rpmdb db, char * provides, dbiIndexSet * matches);
此过程搜索db指定的RPM数据库,查找包的provides信息和指定的provides信息一致的包,返回值保存在matches中。
int rpmdbFindByRequiredBy(rpmdb db, char * requires, dbiIndexSet * matches);
此过程搜索db指定的RPM数据库,查找包的requires信息和指定的requires信息一致的包,返回值保存在matches中。
int rpmdbFindByConflicts(rpmdb db, char * conflicts, dbiIndexSet * matches);