我需要检查我的C程序中是否在系统上安装了某些Debian软件包。我可以使用外部shell脚本,它使用system()来实现apt-cache输出的魔法,但它似乎有点不优雅和hackish,以及如果用户的安装语言不同它将无法工作的事实。是否有一个C库我可以挂钩查询包安装?
答案 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.c
和parse.c
。
诀窍当然是从中提取你需要的东西。此外,GPL可能会或可能不会同意您手头的项目,但至少它是一项研究实施。
可以通过dpkg
查看dpkg -l | grep ii
读取数据库的示例,例如,查看所有已安装的软件包。听起来你只需要将这些信息整理成一个优雅的数组或列表,我想你会在dpkg
内找到灵感来解释如何做到这一点。
如果你最终编写了自己的库(或者用dpkg中的位包装),请把它放在其他人可以找到的地方。你需要的是一个很多人分享的反复出现的。