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

标签 c ubuntu debian

我需要在我的 C 程序中检查某个系统上是否安装了某些 Debian 软件包。我可以使用外部 shell 脚本,它使用 system() 执行 apt-cache 输出的 grep 魔法,但它似乎有点不雅和 hackish,而且如果用户安装的语言不同,它也不会工作。有没有我可以连接到查询包安装的 C 库?

最佳答案

我认为您不会找到符合您标准的已交付库,但是,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 中的位),请将其放在其他人可以找到的地方。您的需求是许多人共有的经常性需求。

关于c - 用于在 C 中查询已安装(Debian)包的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4115946/

相关文章:

c - 函数插入,标记 C 函数总是使用符号 stub 而不是直接调用

linux - Crontab 未运行预期脚本

macos - Golang JSON 时间默认布局因平台而异?

tomcat - 如何在 Ubuntu 14.04 中使用 Apache Tomcat/8.0.29 将端口形式 8080 更改为 80?

php - 升级后的 PHP 现在 apache 不再执行 php 文件

linux - Perl:带参数执行时为 "No such file or directory"

c - 如何从子进程获取信息

C 在运算符调用之前或之后执行函数?重新定义运营商?

c - 将指针分配给不同的指针(计数排序)

c++ - 如何使用 C++ 在 Linux 中获取 utc 偏移量