Cコードを使用してGentooパッケージの数を取得するには?

Cコードを使用してGentooパッケージの数を取得するには?

GitHubにはNeofetchに似たターミナルゲッタープログラムがありますが、bashの代わりにCで書かれています。

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でパッケージ全体の数と明示的にインストールされたパッケージ数をインポートしたいのですが、どのようにインポートするのかわかりません。私のプログラムでシェルコードを使用しています。

選択したパッケージ数量を確認するには:

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

パッケージの総数を取得するには:

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

ベストアンサー1

おすすめ記事