我的 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