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