Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用系统调用使用C语言查找具有特定扩展名的文件计数_C_System Calls - Fatal编程技术网

使用系统调用使用C语言查找具有特定扩展名的文件计数

使用系统调用使用C语言查找具有特定扩展名的文件计数,c,system-calls,C,System Calls,使用bash,我可以找到文件的特定扩展名(如jpg、mp4等)的计数。如何使用C语言系统调用实现这一点?使用C语言系统调用有什么帮助吗 ls -lR /path/to/dir/*.jpg | wc -l 这显示了如何使用readdir()函数。您应该能够很容易地修改它来做您想做的事情。像这样使用 #include <stdio.h> int main(void){ FILE *fp = popen("ls -lR /path/to/dir/*.jpg | wc -l",

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

ls -lR /path/to/dir/*.jpg | wc -l
这显示了如何使用
readdir()
函数。您应该能够很容易地修改它来做您想做的事情。

像这样使用

#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;
}
#包括
内部主(空){
文件*fp=popen(“ls-lR/path/to/dir/*.jpg | wc-l”,“r”);
整数计数;
fscanf(fp、%d、&count);
pclose(fp);
printf(“%d\n”,计数);
返回0;
}

I通用代码。您可以自己操纵d_名称

#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;
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
DIR*dp;
结构方向*dirp;
如果(argc!=2)
/*重做输入*/
if((dp=opendir(argv[1]))==NULL)
/*打开目录时出错*/
printf(“%8s%8s%8s%8s%8s\n”,
“d_名称”、“d_文件号”,
“d_recen”、“d_type”,
“d_namlen”);
而((dirp=readdir(dp))!=NULL)
printf(“%8s%8d%8d%8d%8d%8d\n”,
dirp->d_名称,dirp->d_文件号,
dirp->d_recen,dirp->d_类型,
dirp->d_namlen);
closedir(dp);
返回0;
}

您所说的“C语言系统调用”是什么意思?我的意思是使用C语言和任何可用的系统库函数来实现这一点。对于bash或任何正则表达式,这是可能的,但我想用C语言解决它可能的重复部分取决于你对“系统调用”的定义,但你可能需要任何或所有的和朋友,和朋友。@EOF:是的,但在标准C中系统调用很少;只有库函数,并且至少我提到的一些库函数比系统调用更多。事实上,在我对术语的理解中,只有
readdir()
集合真正接近系统调用。其余的是构建在其他系统调用之上的库函数(特别是,top
readdir()
等)。这是否包括这个人试图避免学习而仍然通过考试的可能性?好吧,我给了这个人一个他们必须修改以做他们需要的事情的示例。所以他们必须学习或理解代码在做什么。@RadLexus:是的,就像Chimara说的,我给出的代码只是一个指南。他必须修改我的代码才能完成他的工作。@alk谢谢。固定的。