C 코드를 사용하여 젠투 패키지 수를 얻는 방법은 무엇입니까?

C 코드를 사용하여 젠투 패키지 수를 얻는 방법은 무엇입니까?

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);

}

젠투에서는 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

관련 정보