【问题标题】:Library for querying installed (Debian) packages in C?用于查询 C 中已安装 (Debian) 软件包的库?
【发布时间】:2010-11-07 00:37:10
【问题描述】:

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

【问题讨论】:

  • 所有答案,包括 apt-cache 自己的源码,以及 libept 都是 C++ 接口。
  • 用户的语言会如何干扰 dpkg -l 和 grep?

标签: c ubuntu debian


【解决方案1】:

我认为您不会找到符合您标准的已发布库,但是,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 中的位),请将其放在其他人可以找到的地方。您的需求是许多人共同的反复出现的需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2020-04-12
    • 2012-02-15
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多