在 C 中使用 libdpkg

Working with libdpkg in C

我查看了 "dpkg-query" 源代码并试图获取已安装软件包的列表。

它可以编译,但是当我尝试 运行 时,我在 modstatdb_open() 函数处遇到错误。

#define LIBDPKG_VOLATILE_API 1
#include <stdio.h>
#include <unistd.h>
#include <dpkg/macros.h>
#include <dpkg/dpkg.h>
#include <dpkg/dpkg-db.h>
#include <dpkg/pkg-array.h>
#include <dpkg/debug.h>
#include <dpkg/pkg-list.h>

void main()
{
   struct pkg_array array;

   modstatdb_open(msdbrw_readonly | msdbrw_available_readonly);

   pkg_array_init_from_db(&array);

   printf("%d\n",array.n_pkgs);

   pkg_array_destroy(&array);
   modstatdb_shutdown();
}

分段错误(核心已转储)

哪里出了问题?

工作版本。 它必须使用 dpkg_program_init(char *progname);首先.

#define LIBDPKG_VOLATILE_API 1

#include <stdio.h>
#include <unistd.h>
#include <dpkg/dpkg.h>
#include <dpkg/dpkg-db.h>
#include <dpkg/pkg-array.h>


void main()
{
    struct pkgset *set;
    struct pkginfo *inf;
    struct pkg_array array;

    dpkg_program_init("a.out");
    modstatdb_open(msdbrw_available_readonly);

    pkg_array_init_from_db(&array);
    printf("Number of packages in local database: %d\n",array.n_pkgs);

    inf = pkg_db_find_singleton("kate");
    printf("status code of package: %d\n", inf->status);// 7 means installed

    dpkg_program_done();
}