2016-12-05 7 views
-2

Используя bash, я могу найти счетчик конкретных расширений файла, такого как jpg, mp4 и т. Д. Как я могу достичь этого, используя системные вызовы языка C? Любая помощь для достижения этой цели с помощью системных вызовов языка C?Поиск количества файлов с определенным расширением с использованием языка C с использованием вызовов sytem

ls -lR /path/to/dir/*.jpg | wc -l 
+2

Что вы подразумеваете под «системными вызовами на языке C»? – EOF

+0

Я хочу достичь этого с помощью языка C с любыми доступными функциями системной библиотеки. С bash или любым регулярным выражением это возможно, но я хочу решить с использованием языка C –

+0

Возможный дубликат [C: Запустить системную команду и получить выход?] (Http://stackoverflow.com/questions/646241/c-run-a-system -command-and-get-output) –

ответ

0

Here is an example, который показывает, как с помощью функции readdir(). Вы должны иметь возможность легко изменить это, чтобы делать то, что хотите.

+0

Это включает в себя возможность того, что этот человек пытается избежать чего-то и * еще пройти экзамен? – usr2564301

+1

Ну, я дал этому человеку пример, который они должны были бы изменить, чтобы делать то, что им нужно. Поэтому им нужно будет узнать или понять, что делает код. – Chimera

+0

@RadLexus: Да, как сказал Чимара, мой данный код является лишь ориентиром. Он должен изменить свой код, чтобы выполнить его работу. –

1

Использовать popen вот так.

#include <stdio.h> 

int main(void){ 
    FILE *fp = popen("ls -lR /path/to/dir/*.jpg | wc -l", "r"); 
    int count; 

    fscanf(fp, "%d", &count); 
    pclose(fp); 

    printf("%d\n", count); 

    return 0; 
} 
+0

@alk Спасибо. исправлено. – BLUEPIXY

1

I код для общего пользования. Вы можете управлять d_name самостоятельно.

#include <sys/types.h> 
#include <dirent.h> 
#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    DIR *dp; 
    struct dirent *dirp; 

    if (argc != 2) 
     /* redo input */ 
    if ((dp = opendir(argv[1])) == NULL) 
     /* error opening dir */ 
    printf("%8s %8s %8s %8s %8s\n", 
      "d_name", "d_fileno", 
      "d_reclen", "d_type", 
      "d_namlen"); 
    while ((dirp = readdir(dp)) != NULL) 
     printf("%8s %8d %8d %8d %8d\n", 
       dirp->d_name, dirp->d_fileno, 
       dirp->d_reclen, dirp->d_type, 
       dirp->d_namlen); 
    closedir(dp); 
    return 0; 
}