递归遍历Linux下的目录文件源码实现
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                递归遍历Linux下的目录文件源码实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                網(wǎng)上搜到的結果大都不令人滿意,這里綜合了網(wǎng)上的結構,做了小許改動.希望對大家有幫助.
在Linux下的目錄結構操作基本上使用opendir,readdir,closedir就夠了.
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>int trave_dir(char* path)
{DIR *d;//聲明一個句柄struct dirent *ent;//readdir函數(shù)的返回值就存放在這個結構體中struct stat sb;char childpath[512] = {'\0'};//拼湊下一級目錄的全路徑if(!(d = opendir(path))){printf("error opendir %s!!!\n",path);return -1;}while((ent = readdir(d)) != NULL){//把當前目錄.,上一級目錄..及隱藏文件都去掉,避免死循環(huán)遍歷目錄if(strncmp(ent->d_name, ".", 1) == 0)continue;//判斷該文件是否是目錄if(ent->d_type & DT_DIR){memset(childpath, '\0', sizeof(childpath));char* format = path[strlen(path)-1]=='/'?"%s%s":"%s/%s";snprintf(childpath, 512, format, path, ent->d_name);printf("[dir]%s\n", childpath);trave_dir(childpath);}else{printf("\t%s\n", ent->d_name);}}closedir(d);return 0;
}int main(int argc, char* argv[])
{if(argc != 2){printf("Usage: %s <path>\n", argv[0]);return 0;}trave_dir(argv[1]);return 0;
}主要特點:
(1)只需要一個入?yún)?即指定要遍歷目錄樹的頂層目錄,并會自動判斷末尾是否含有"/"
(2)目錄樹的打印只在函數(shù)內(nèi)部實現(xiàn),不會用到相關動態(tài)內(nèi)存分配
(3)從readdir中返回的Dir結構就可以判斷這層目錄是目錄還是真正的文件,不需要使用stat等函數(shù)來額外判斷
使用方法:
gcc -g readdir_demo.c -o readdir_demo
./readdir_demo "/home/taoyx"或是
./readdir_demo "/home/taoyx/"
代碼運行截圖
 
總結
以上是生活随笔為你收集整理的递归遍历Linux下的目录文件源码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 在Ubuntu 14.04 64bit上
- 下一篇: boost::asio中的C/S同步实例
