如何在类似 debian 的系统中使用 libapt(或 libept)来列出软件包并获取其信息?

发布于 2024-07-10 13:29:35 字数 272 浏览 10 评论 0原文

有人使用 libapt 或 libept 来列出软件包并获取有关 debian 类系统中软件包的信息?

Libapt 根本没有很好的文档记录,而且我发现了一些关于 libept 的示例和教程。 有人可以向我解释一下

  1. 获取 apt 系统中每个包的列表的
  2. 最佳方法吗?获取有关单个包的信息(如名称、版本、依赖项、描述等)
  3. 获取单个包安装的文件列表

直接使用 apt 内部文件很简单,但我想使用一个库来尊重适当的规范。

Somebody used libapt or libept to list packages and get informations about package in a debian-like system?

Libapt is not well-documented at all, and i've found few examples and tutorials about libept. Can someone explain me best methods to

  1. get a list of every packages in the apt-system
  2. get informations about single packages (like name, version, dependences, description, etc.
  3. get list of files installed by a single package

Work directly with apt internal files is quite simple, but i want to use a library to respect apt specifications.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

舟遥客 2024-07-17 13:29:35

在 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;
}

In debian there is a package called libapt-pkg-doc which contains some documentation (like an API reference). Once installed, you can access it at file:///usr/share/doc/libapt-pkg-doc/html/index.xhtml.

I only just had a look at libapt and here is what I have learned so far:

How to list all packages:

#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;
}
七度光 2024-07-17 13:29:35

看一下 apt-cache(8) 是如何实现的。 使用 apt 获取源代码很容易:

# apt-get source apt

在源文件 cmdline/apt-cache.cc 中,有一个名为 DumpPackage() 的函数,它从缓存。

Take a look at how apt-cache(8) is implemented. Obtaining the source with apt is easy:

# apt-get source apt

In the source file cmdline/apt-cache.cc theres is a function called DumpPackage() which extracts information from a named file in the cache.

风渺 2024-07-17 13:29:35

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

There is also DPKG::Parse from CPAN if you are using perl.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文