|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 wxl756617397 于 2020-10-26 11:17 编辑
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dirent.h"
#include <libgen.h>
#define XK_SERVICE_RSYNCD_MODEL_DIR "/home/wxl/workspace/c"
//#define XK_SERVICE_RSYNCD_MODEL_DIR "/var/share/cfg/rsync/model/"
int search_dir(char *path)//查找path目录及其子目录下后缀为.conf的文件
{
DIR *dir=NULL;
struct dirent *entry=NULL;
if((dir=opendir(path))==NULL)//打开目录,返回该目录下的由目录和文件组成的列表
{
printf("opendir failed\n");
return -1;
}
else
{
while((entry=readdir(dir))!=NULL)//循环读取列表中目录(子目录)或文件的信息
{
if(strcmp(entry->d_name,".")==0||strcmp(entry->d_name,"..")==0)//过滤本地目录及上级目录的信息.
continue;
if(entry->d_type==4)//子目录,递归继续遍历子目录
{
char pathbuf[1024]={0};
sprintf(pathbuf,"%s/%s",path,entry->d_name);
search_dir(pathbuf);
}
else//文件
{
char *tmp=strrchr(entry->d_name,'.');
if(tmp==NULL)
continue;
if(strcmp(tmp,".conf")==0)
{
char buf[1024]={0};
// printf("%s\n",entry->d_name);
sprintf(buf,"%s/%s",path,entry->d_name);
printf("%s\n",buf);
char buf1[300], *pw;
char buf2[300];
FILE *fp;
int len;
if(strcmp(entry->d_name,"rsync.conf")==0){
if ((fp = fopen(buf, "r")) == NULL)
{
printf("fail to read");
exit(1);
}
while (fgets(buf1, 300, fp) != NULL)
{
pw=strstr(buf1,"path");
printf("%s",pw);
sprintf(buf2,"%s",basename(pw));
printf("%s\n",buf2);
}
fclose(fp);
}
}
}
}
}
return 0;
}
int main()
{
char *path=NULL;
search_dir(XK_SERVICE_RSYNCD_MODEL_DIR);
return 0;
}
这个输出的时候如何把(null).未找到的行输出的这些(null).删除呀 |
|