linux(c)广度优先遍历指定目录

// 广度优先遍历采取的是先遍历完本层目录下的所有文件和目录,当判断是目录时则将该目录加入到目录队列中,等待递归遍历这个目录


#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <dirent.h>
#include <sys/stat.h>
char path[100000][250]={""};
int main(int argc,char *argv[])
{
        fun(argv[1]);
        return 0;
}


void fun(char *lname)
{
int i=0,k=1;
        DIR *dir_ptr;
        struct stat infobuf;
        struct dirent *direntp;
        char *name,temp[100]={0};
strcpy(path[0],lname);
while((strcmp(path[i],"")!=0))
{
        if ((dir_ptr = opendir(path[i])) == NULL)
                perror("can not open");
        else
        {
                while ((direntp = readdir(dir_ptr))!= NULL)
                {
                        strcpy(temp,"");
                        name=direntp->d_name;
                        if((strcmp(name,".")==0) | (strcmp(name,"..")==0))
                        {
                                printf(name);
                                printf("\n");
                        }
                        else
                        {
                                strcat(temp,path[i]);
                                strcat(temp,"/");
                                strcat(temp,name);
                    if((stat(temp,&infobuf))==-1)
                                        printf("#########%s\n",temp);
                                if ((infobuf.st_mode & 0170000) == 0040000)
                                {
                                        printf(name);
                                        printf("        this is a directory\n");
strcpy(path[k],temp);
k++;
                                }
                                else
                                {
                                       printf(name);
                                       printf("        this is a file\n");
                               }

                       }
               }closedir(dir_ptr);
        }
i++;
printf(path[i]);
printf("\n******** %d\n",i);
}


}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值