代码之家  ›  专栏  ›  技术社区  ›  Delan Azabani

查询C中已安装(Debian)包的库?

  •  1
  • Delan Azabani  · 技术社区  · 14 年前

    我需要检查某些Debian包是否安装在我的C程序中的系统上。我可以使用外部shell脚本,这些脚本使用system()对apt cache输出执行grep magic操作,但它似乎有点不雅和不雅,而且如果用户安装的语言不同,它将不起作用。是否有一个C库可以连接到其中以查询包安装?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Tim Post Samir J M Araujo    14 年前

    我不认为你会找到一个符合你的标准的库,但是 dpkg 程序内部做的正是你所描述的,并且不链接到C++ LIBS(或者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 -l | grep ii dpkg公司 关于怎么做。