使用系统调用使用C语言查找具有特定扩展名的文件计数
使用bash,我可以找到文件的特定扩展名(如jpg、mp4等)的计数。如何使用C语言系统调用实现这一点?使用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",
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()
集合真正接近系统调用。其余的是构建在其他系统调用之上的库函数(特别是,topreaddir()
等)。这是否包括这个人试图避免学习而仍然通过考试的可能性?好吧,我给了这个人一个他们必须修改以做他们需要的事情的示例。所以他们必须学习或理解代码在做什么。@RadLexus:是的,就像Chimara说的,我给出的代码只是一个指南。他必须修改我的代码才能完成他的工作。@alk谢谢。固定的。