【问题标题】:How readdir function is working inside while loop in C?readdir 函数如何在 C 中的 while 循环中工作?
【发布时间】: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个目录hellotree。当调用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


    【解决方案1】:

    这是。然后 .. 因为在目录内部,有当前目录和父目录的链接,即 ... , strcmp 检查是因为您不想无限次列出您的目录(转到 . 然后再到 . 等),如果是,请忽略它并继续。

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 2020-04-29
      • 2015-01-06
      • 2020-10-10
      相关资源
      最近更新 更多