【问题标题】:listing directory files problem列出目录文件问题
【发布时间】:2010-11-19 13:30:09
【问题描述】:

当我通过下面的代码列出文件时:

/*
 * This program displays the names of all files in the current directory.
 */

#include <dirent.h> 
#include <stdio.h> 

int main(void)
{
  DIR           *d;
  struct dirent *dir;
  d = opendir(".");
  if (d)
  {
    while ((dir = readdir(d)) != NULL)
    {
      printf("%s\n", dir->d_name);
    }

    closedir(d);
  }

  return(0);
}

文件是:

1. client.c
2. deneme.c
3. server.c
4. chat.h~
5. .
6. makefile~
7. udpClient.c~
8. ..
9. udpServer.cpp~
10. client
11. chat.h
12. udpServer.c~
13. server
14. makefile
15. deneme.c~

什么是数字 5. 和 8. 如果鞋那个文件名为 '.'或者 '..'。为什么会发生。有什么问题?

【问题讨论】:

  • 唯一奇怪的是它们不是 1 号和 2 号。文件系统需要非常病态的实现才能将它们存储在除前 2 个目录条目之外的任何地方...

标签: c linux ftp directory


【解决方案1】:

POSIX 文件系统上的每个目录都包含一个条目.,它是指向自身的链接,.. 是指向其父目录的链接。 (根目录是它自己的父目录)。

【讨论】:

    【解决方案2】:

    '.'和 '..' 是两个始终存在的目录,这不是错误。

    其实如果你在bash上写

    cd .
    

    cd ..
    

    效果很好。

    【讨论】:

      【解决方案3】:

      在你要做的每一个目录列表中,

      “。”将始终首先出现,它是当前目录,即您执行“.”的“opendir()”后所在的目录

      ".." 总是会出现在第二个,它是上一个目录,是你加入当前目录的那个目录,

      在“..”下方,出现的所有其他内容将是您创建的目录或文件,或者在这种情况下,当前目录“.”中已经存在的目录或文件。

      【讨论】:

        猜你喜欢
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        • 2017-10-27
        • 2012-12-12
        • 1970-01-01
        • 2012-12-09
        • 2010-09-24
        相关资源
        最近更新 更多