问题 如何在类似debian的系统中使用libapt(或libept)来列出包并获取它们的信息?


有人使用libapt或libept列出包并在类似debian的系统中获取有关包的信息吗?

Libapt没有完整的记录,我发现很少有关于libept的例子和教程。有人可以解释我最好的方法

  1. 获取apt-system中每个包的列表
  2. 获取有关单个包的信息(如名称,版本,依赖关系,描述等)。
  3. 获取单个包安装的文件列表

直接使用apt内部文件非常简单,但我想使用库来遵守apt规范。


12881
2017-12-04 17:51


起源



答案:


在debian中有一个名为的包 libapt-pkg-doc 其中包含一些文档(如API参考)。安装后,您可以通过file:///usr/share/doc/libapt-pkg-doc/html/index.xhtml访问它。

我只是看了一下libapt,这是我到目前为止所学到的:

如何列出所有包:

#include <apt-pkg/cachefile.h>
#include <apt-pkg/pkgcache.h>

int main() {
    // _config and _system are defined in the libapt header files
    pkgInitConfig(*_config);
    pkgInitSystem(*_config, _system);

    pkgCacheFile cache_file;
    pkgCache* cache = cache_file.GetPkgCache();

    for (pkgCache::PkgIterator package = cache->PkgBegin(); !package.end(); package++) {
        std::cout << package.Name() << std::endl;
    }

    return 0;
}

10
2018-05-31 12:33



那列出了所有的 安装 包,或者列出所有包 可供安装? - Throwaway Account 3 Million
如果我没记错的话,@ ThrowawayAccount3Million会列出可用的包 - eyelash


答案:


在debian中有一个名为的包 libapt-pkg-doc 其中包含一些文档(如API参考)。安装后,您可以通过file:///usr/share/doc/libapt-pkg-doc/html/index.xhtml访问它。

我只是看了一下libapt,这是我到目前为止所学到的:

如何列出所有包:

#include <apt-pkg/cachefile.h>
#include <apt-pkg/pkgcache.h>

int main() {
    // _config and _system are defined in the libapt header files
    pkgInitConfig(*_config);
    pkgInitSystem(*_config, _system);

    pkgCacheFile cache_file;
    pkgCache* cache = cache_file.GetPkgCache();

    for (pkgCache::PkgIterator package = cache->PkgBegin(); !package.end(); package++) {
        std::cout << package.Name() << std::endl;
    }

    return 0;
}

10
2018-05-31 12:33



那列出了所有的 安装 包,或者列出所有包 可供安装? - Throwaway Account 3 Million
如果我没记错的话,@ ThrowawayAccount3Million会列出可用的包 - eyelash


看看apt-cache(8)是如何实现的。使用apt获取源代码很简单:

# apt-get source apt

在源文件中 cmdline/apt-cache.cc theres是一个叫做的函数 DumpPackage() 它从缓存中的命名文件中提取信息。


6
2017-12-04 18:16





如果你使用perl,还有来自CPAN的DPKG :: Parse。


0
2018-02-26 15:57





只是要提一下,有 wpkg 它能够读取Debian软件包并为您提供所有信息。但是,它对apt或dpkg数据库一无所知。它将能够读取.deb,你可以用C ++提取所有信息和文件。


-2
2018-01-23 02:04