Linux系统编程:获取指定目录下指定文件类型的数量
生活随笔
收集整理的這篇文章主要介紹了
Linux系统编程:获取指定目录下指定文件类型的数量
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
分析
編程實現(xiàn)對指定目錄下的指定文件類型數(shù)量的統(tǒng)計。這里涉及到對目錄文件的打開和對目錄文件下的文件的遍歷。
這里主要用的2個庫函數(shù),打開目錄的 opendir函數(shù),readdir函數(shù)。對這2個庫函數(shù)不熟悉?請看man 3 readdir,man 3 opendir,非常詳細(xì)。opendir函數(shù) 打開失敗的時候 返回NULL ,errorno被設(shè)置,可以通過perror獲取錯誤信息。readdir函數(shù)會遍歷目錄下的所有文件,注意是一個一個的返回,注意是讀一次返回一次,返回的struct dirent 結(jié)構(gòu)體指針,里面包含文件的類型、文件的名稱、文件大小等 文件信息。
opendir函數(shù)說明
readdir函數(shù)說明
實現(xiàn)代碼
#include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <string.h> char* fileType = NULL;// [-,d,p,s,l,c,b] 轉(zhuǎn)化為 對應(yīng)的 文件類型 unsigned char GetFileType(char* type) {if(strcmp(type,"b")==0){return DT_BLK;}else if(strcmp(type,"c")==0){return DT_CHR;}else if(strcmp(type,"d")==0){return DT_DIR;}else if(strcmp(type,"p")==0){return DT_FIFO;}else if(strcmp(type,"l")==0){return DT_LNK;}else if(strcmp(type,"-")==0){return DT_REG;}else if(strcmp(type,"s")==0){return DT_SOCK;}else{printf("文件類型輸入錯誤,文件類型為[-,d,p,s,l,c,b]\n");exit(1);}}int GetFileNum(const char* path) {int total = 0;DIR* dir = opendir(path);if(dir==NULL){perror("opendir error");exit(1);}struct dirent* dirObj = NULL;char* dirName = NULL;//循環(huán)讀取目錄下的文件while(dirObj = readdir(dir)){dirName = dirObj->d_name;if(strcmp(dirName,".")==0 || strcmp(dirName,"..")==0){continue;}if(dirObj->d_type == GetFileType(fileType) ){total++;}if(dirObj->d_type==DT_DIR){char temp[1024] = {0};sprintf(temp,"%s/%s",path,dirName);//碰到目錄文件進(jìn)行遞歸遍歷total+= GetFileNum(temp);}}return total; } int main(int argc,int* argv[]) {if(argc<3){printf("./GetFileNum path fileType");exit(0);}char* path = argv[1];fileType = argv[2];int num = GetFileNum(path);printf("%s目錄下有%s文件:%d\n",path,fileType,num);return 0; }運(yùn)行結(jié)果
總結(jié)
以上是生活随笔為你收集整理的Linux系统编程:获取指定目录下指定文件类型的数量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT5成长之路绪论
- 下一篇: linux 其他常用命令