【问题标题】:Finding count of files with specific extension using C language using sytem calls使用系统调用使用 C 语言查找具有特定扩展名的文件数
【发布时间】:2016-12-05 18:09:11
【问题描述】:

使用 bash,我可以计算 jpg、mp4 等文件的特定扩展名的数量。如何使用 C 语言系统调用来实现这一点?使用 C 语言系统调用来实现这一点有什么帮助吗?

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

【问题讨论】:

  • “C 语言系统调用”是什么意思?
  • 我的意思是使用 C 语言和任何可用的系统库函数来实现这一点。可以使用 bash 或任何正则表达式,但我想使用 C 语言解决
  • 这取决于您对“系统调用”的定义,但您可能需要scandir() 和朋友、readdir() 和朋友、nftw()、fnmatch() 中的任何一个或全部。
  • @EOF:是的,但是标准 C 中的系统调用很少;只有库函数,至少我提到的其中一些是库函数而不是系统调用。事实上,在我对术语的理解中,只有readdir() 集合真正接近系统调用。其余的是构建在其他系统调用之上的库函数(特别是在 readdir() 等之上)。

标签: c system-calls


【解决方案1】:

我为一般用途编码。您可以自行操作 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;
}

【讨论】:

    【解决方案2】:

    像这样使用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;
    }
    

    【讨论】:

    • @alk 谢谢。固定。
    【解决方案3】:

    Here is an example 展示了如何使用readdir() 函数。您应该能够轻松地对其进行修改以执行您想要的操作。

    【讨论】:

    • 这是否包括此人试图避免学习某些东西而仍然通过考试的可能性?
    • 好吧,我给这个人举了一个例子,他们必须修改才能做他们需要的事情。所以他们必须学习或理解代码在做什么。
    • @RadLexus:是的,就像 Chimara 说的,我给定的代码只是指导方针。他必须修改我的代码才能完成他的工作。
    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 2013-03-30
    • 1970-01-01
    • 2012-02-11
    • 2011-08-21
    • 2019-07-21
    • 1970-01-01
    相关资源
    最近更新 更多