【发布时间】:2022-01-21 01:59:06
【问题描述】:
我正在学习 C,这段代码是 C 中树命令实现的一部分。我不明白 readdir 函数在 while 循环中是如何工作的。
static struct t_node *create_tree(char *root_name) {
DIR *dir = opendir(root_name);
struct dirent *dr = { NULL };
struct t_node *ptr_tstart = NULL, *temp = NULL, *temp1 = NULL;
char *name=(char *)calloc(2000, sizeof(char));
if (dir == NULL) {
printf("\nFailed to open ..!!");
printf(" : %s", root_name);
return NULL;
}
while ((dr = readdir(dir)) != NULL) {
printf("\ndr->d_name = %s", dr->d_name);
if (strcmp((dr->d_name), ".") != 0 && strcmp((dr->d_name), "..") != 0) {
temp = create_tnode(dr->d_name);
} else {
temp = NULL;
continue;
}
printf("\ntemp1!=NULL => %d", temp1 != NULL);
...
}
}
当前目录是cprogs,在cprogs里面还有另外2个目录hello和tree。当调用create_tree 结构时,root_name 是"/root/cprogs"。之后它进入while 循环,我在日志中看到的是:
dr->d_name = .
dr->d_name = ..
dr->d_name = hello
temp1!=NULL => 0
我不明白为什么d_name 是".",然后是"..",然后是"hello"。所以第一次d_name的值是".",之后它转到if语句而不是true,所以它转到else语句,当点击continue时它转到到while 循环。为什么此时d_name 变成了".."?在那之后为什么它变成“你好”?谢谢!
【问题讨论】:
标签: c while-loop readdir