系统编程_1
刚接触linux下的C语言编程,试着写了常见命令ls的相关参数,其中自己感觉-R选项的实现还是比较麻烦,走了不少弯路。血与泪的创作开始了(滑稽)。
int Recursive(char *path)
{
DIR * dir;
struct stat buf;
struct dirent *ptr;
int i = 0,count = 0,k = 0,m;
char st[20000];
char * p;
char name[20000]; //当你想统计'/'目录下的文件的时候,大数组完全就是种享受(滑稽)
p = path + strlen(path);
if(lstat(path,&buf) < 0) //获取目录属性
{
perror("lstat");
return -1;
}
if(S_ISDIR(buf.st_mode) == 0) //判断是否是目录文件
{
return -1;
}
if(*(p-1)!= '/') //将目录文件路径补充完整
{
*p++ = '/';
*p = 0;
}
printf("\n");
puts(path); //输出该级目录路径
if((dir = opendir(path)) == NULL) //打开指定目录
{
perror("opendir");
return -1;
}
while((ptr = readdir(dir)) != NULL)
{
if((strcmp(ptr->d_name,".")==0) || (strcmp(ptr->d_name,"..")==0))
continue; //剔除隐藏文件
strcpy(p,ptr->d_name);
strcpy(name,path); //保存文件所在路径名
for(i = 0;i<strlen(name);i++) //单纯的获得文件名称
{
if(name[i] == '/')
{
k = 0;
continue;
}
st[k] = name[i];
k++;
}
st[k] = '\0';
printf("%s\t",st); //输出该层目录下的文件名称
if(lstat(name,&buf) < 0) //对该层目录下的文件进行判断与删选
{
perror("lstat");
return -1;
}
if(S_ISDIR(buf.st_mode) < 0) //如果不是目录文件继续遍历该层其余文件
continue;
if(Recursive(name) == 0) //继续沿着目录文件向下访问
printf("\n");
}
p[-1] = 0;
if((m =closedir(dir)) == -1)
{
return -1;
}
printf("\n");
return 0;
}
以下是程序是程序运行的结果:
其中test_dir ,test_dir1 是目录文件
下方对应输出其中的文件