构造Linux的图形化安装程序(4)[8]

[入库:2005年9月19日] [更新:2007年3月25日]

本文简介:

  此函数将头h写入文件fd中并且转换主机系统字节序为网络字节序。如果magicp定义为HEADER_MAGIC_YES,此函数在写入的头信息中加入适当的幻数。如果magicp定义为HEADER_MAGIC_NO,此函数写入的信息不包含幻数。
  
  Header headerCopy(Header h);
  此函数返回头h的副本。
  
  unsigned int headerSizeof(Header h, int magicp);
  此函数返回头h占用的字节数。
  
  Header headerNew(void);
  此函数返回一个新的头。
  
  void headerFree(Header h);
  此函数释放h所指定的头信息。
  
  void headerDump(Header h, FILE *f, int flags);
  此函数打印头h结构到文件f中。若flags标志为HEADER_DUMP_INLINE,头数据也被打印。
  
  4.9 包头信息处理
  此节的这些函数提供处理头入口的基本操作,包含下列头入口类型:
  
  RPM_NULL_TYPE - 不使用此类型
  RPM_CHAR_TYPE - 此入口包含单一字符
  RPM_INT8_TYPE - 此入口包含八位字符
  RPM_INT16_TYPE - 此入口包含16位字符
  RPM_INT32_TYPE - 此入口包含32位字符
  RPM_INT64_TYPE - 此入口包含64位字符
  RPM_STRING_TYPE - 此入口包含字符串类型。
  RPM_BIN_TYPE - 此入口包含rpmlib无法处理的二进制数据。
  RPM_STRING_ARRAY_TYPE - 此入口包含字符数组。
  
  int headerGetEntry(Header h, int_32 tag, int_32 *type, void **p, int_32 *c);
  此过程从h中取出与tag标志匹配的入口。入口类型由type返回,数据指针由p返回,数据大小由c返回。
  
  
  int headerAddEntry(Header h, int_32 tag, int_32 type, void *p, int_32 c);
  此函数向头h中加入新的入口, tag参数指定入口的标志,type指定入口的类型。P指定入口数据,c是此数据的大小。
  
  4.10 头重复器支持
  rpmdbMatchIterator rpmdbInitIterator(rpmdb rpmdb, int rpmtag, const void * key, size_t keylen);
  此函数返回新创建的重复器。
  
  Header rpmdbNextIterator(rpmdbMatchIterator iter);
  此函数获得下一个头信息。
  
  void rpmdbFreeIterator(rpmdbMatchIterator iter);
  此函数释放重复器iter占用的资源。
  
  
  5 RPM包管理过程实现
  在安装程序中与包管理有关的函数基本上都保存在文件pkgs.pm中。这个模块中包含的主要函数如下:
  
  getDeps
  读入文件depslist.ordered,通过它形成所有包所依赖rpm包的描述结构。
  
  getProvides
  读入所有rpm文件的头信息描述结构,通过provides字段形成包的Provides结构。
  
  init_db,rebuild_db_open_for_traversal,clean_old_rpm_db
  初始化(重建、清除)包的rpm配置数据库
  
  install
  安装指定的rpm包。
  
  packageByXXX
  通过对读入的包头信息的解释,生成相应的包内部信息。比如读出包的大小,版本号,描述,名字等。
  
  psUsingHdlists
  读入hdlists,由它每一行保存的信息,读入对应的hdlist文件
  
  psUsingHdlist
  由psUsingHdlists函数调用,读入所有的rpm包的文件头描述信息。
  
  remove
  删除指定的rpm包。
  
  read_rpmsrate
  读入rpmsrate,形成最基本的包类描述。
  
  readCompssUsers
  读入高层的包类描述信息,返回compssUsers结构。每选中一个compssUsers类,对应多个rpmsrate文件描述的子类。
  
  selectPackage
  选中指定的包。
  
  unselectPackage
  取消指定包的选中状态。
  
  包的处理过程的一般流程:
  
  
  #-" 下面的程序是RPM包安装过程代码,它是整个包安装过程中作关键的部分。它使用了安装回调的机
  #- 制,使得包安装过程中,系统可以随时显示安装进度并更换安装插图。

本文关键:构造Linux的图形化安装程序(4)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top