用于在C中查询已安装(Debian)软件包的库?

时间:2010-11-07 00:37:10

标签: c ubuntu debian

我需要检查我的C程序中是否在系统上安装了某些Debian软件包。我可以使用外部shell脚本,它使用system()来实现apt-cache输出的魔法,但它似乎有点不优雅和hackish,以及如果用户的安装语言不同它将无法工作的事实。是否有一个C库我可以挂钩查询包安装?

1 个答案:

答案 0 :(得分:2)

我认为你不会找到符合你标准的附带库,但是,dpkg程序内部完全按照你所描述的那样执行,并且不会链接到C ++库(或libstdc ++) ):

tpost@tpost-desktop:~$ ldd -v /usr/bin/dpkg
        linux-gate.so.1 =>  (0x00f33000)
        libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00dfb000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x0077a000)
        /lib/ld-linux.so.2 (0x006a6000)

如果您apt-get source dpkg,我认为您会在源代码树中lib/dpkg找到所需的代码,尤其是database.cparse.c

诀窍当然是从中提取你需要的东西。此外,GPL可能会或可能不会同意您手头的项目,但至少它是一项研究实施。

可以通过dpkg查看dpkg -l | grep ii读取数据库的示例,例如,查看所有已安装的软件包。听起来你只需要将这些信息整理成一个优雅的数组或列表,我想你会在dpkg内找到灵感来解释如何做到这一点。

如果你最终编写了自己的库(或者用dpkg中的位包装),请把它放在其他人可以找到的地方。你需要的是一个很多人分享的反复出现的。

相关问题