一个linux下的C语言目录扫描程序,看不懂,求注释!越详细越好啊。会追加悬赏的!!

一个linux下的C语言目录扫描程序,看不懂,求注释!越详细越好啊。会追加悬赏的!!,第1张

其实递归这种东西你如果理解了,根本不需要注释,如果不理解再多的注释还是不懂,这个是linux程序设计中的一段经典代码,代码的核心其实就这几句

if(S_ISDIR(statbuf.st_mode))

{

if(strcmp(".",entry->d_name)==0||strcmp("..",entry->d_name)==0)

continue

printf("%*s%s/\n",depth,"",entry->d_name)

printdir(entry->d_name,depth+4)

}

首先确定是目录,要不然直接输出,然后如果的当前目录(.)或者父目录(..),则执行下一个循环其实就是跳过这两个目录,printf("%*s%s/\n",depth,"",entry->d_name)这句其实就是让显示的好看点,根据depth决定要打印出几个空格,书上有关于&*s的用法,接着就是再一次递归。。。。这个解释不来,只能意会不能言传。

若是 查找 指定 文件名:

sudo find/ -name "filename_to_find"

若是 查找 文件 中的内容:

sudo find/ -name "*" -exec grep "woed_to_find" {}\

#include <unistd.h>

#include <stdio.h>

#include <dirent.h>

#include <string.h>

#include <sys/stat.h>

#include <stdlib.h>

void printdir(char* dir, int depth)

{

DIR *dp

struct dirent *entry

struct stat statbuf

if( (dp = opendir(dir)) == NULL )

{

fprintf(stderr, "cannot open directory: %s\n", dir)

return

}

chdir(dir)

while( (entry = readdir(dp)) != NULL)

{

lstat(entry->d_name, &statbuf)

if( S_ISDIR(statbuf.st_mode) )

{

if( strcmp(".", entry->d_name) == 0 || strcmp("..", entry->d_name) == 0 )

continue

printf("%*s%s/\n", depth, "", entry->d_name)

printdir(entry->d_name, depth+4)

}

else

printf("%*s%s\n", depth, "", entry->d_name)

}

chdir("..")

closedir(dp)

}

int main(int argc, char* argv[])

{

char *topdir = "."

if( argc >= 2 )

topdir=argv[1]

printf("Directory scan of %s\n", topdir)

printdir(topdir, 0)

printf("Done.\n")

exit(0)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8486230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存