如何使用 C 代码获取 Gentoo 包数量?

如何使用 C 代码获取 Gentoo 包数量?

我的 GitHub 上有一个类似于 Neofetch 的终端获取程序,但它是用 C 而不是 bash 编写的,称为取值

我知道如何使用 C 获取 Arch 的包数量:

static char *get_packages(const char* dirname, const char* pacname, int num_extraneous) {
int num_packages = 0;
DIR * dirp;
struct dirent *entry;

dirp = opendir(dirname);

if(dirp == NULL) {
    status = -1;
    halt_and_catch_fire("You may not have %s installed", dirname);
}

while((entry = readdir(dirp)) != NULL) {
    if(entry->d_type == DT_DIR) num_packages++;
}
num_packages -= (2 + num_extraneous); // accounting for . and ..

status = closedir(dirp);

char *packages = malloc(BUF_SIZE);
snprintf(packages, BUF_SIZE, "%d (%s)", num_packages, pacname);

return packages;

}

static char *get_packages_pacman_total() {
return get_packages("/var/db/pacman/local", "pacman", 0);

}

在 Gentoo 中,每个包都被放置在一个类别中,这与 Arch 不同。它们位于 /var/db/pkg/*/* 所以我尝试了这个:

static char *get_packages_portage_total() {
return get_packages("/var/db/pkg/*", "portage", 0);

}

但不幸的是,这并没有奏效。我想获取 C 中的总包计数和显式安装的包计数,但不知道如何获取。我在程序中使用了 shell 代码。

要获取选定的包裹数量:

wc -l /var/lib/portage/world | cut -d ' ' -f1

要获取包裹总数:

ls -d /var/db/pkg/*/* | wc -l

相关内容