当我从目录打印文件时,为什么会出现点(“。”和“..”)?

时间:2014-05-18 00:43:38

标签: c directory printf readdir

我使用C语言打印两个目录中的文件。这是我的代码:

char *list1[30], *list2[30];
int i=0, x=0;
struct dirent *ent, *ent1;

/* print all the files and directories within directory */
    while ((ent = readdir (dirSource)) != NULL) {
        list1[i] = ent->d_name; 
        i++;        
    }
    i=0;
    while((ent1 = readdir (dirDest)) != NULL) {
        list2[i] = ent1->d_name;    
        i++;
    }

    while(x != i){
        printf("Daemon - %s\n", list1[x]);
        printf("Daemon1 - %s\n", list2[x]);
        x++;
    }

我可以打印所有文件,但每次我在目录中打印文件时,最终结果如下:

守护进程 - 。 Daemon1 - 。 守护进程 - .. 守护进程1 - .. 守护进程 - fich5 Daemon1 - fich4 守护进程 - fich3 Daemon1 - fich3

我不明白为什么一开始就有点。 Obs。:我不知道是否重要,但我在笔上使用Ubuntu 14.04,这意味着每次使用Ubuntu时,我都会使用试用而不是在我的电脑上使用双启动。

2 个答案:

答案 0 :(得分:4)

...是两个特殊文件,位于Linux和其他类Unix系统的每个目录中。 .表示当前目录,..表示父目录。

答案 1 :(得分:2)

Unix中的每个目录都有条目.(表示当前目录)和..(父目录)。 给它们以“。”开头。它们是隐藏文件;除非您使用“-a”选项,否则ls通常不会显示它们。

见:

[:~/tmp/lilla/uff] % ls -l
total 0
-rw-rw-r-- 1 romano romano 0 May 17 18:48 a
-rw-rw-r-- 1 romano romano 0 May 17 18:48 b
[:~/tmp/lilla/uff] % ls -la
total 8
drwxrwxr-x 2 romano romano 4096 May 17 18:48 .
drwxrwxr-x 3 romano romano 4096 May 17 18:47 ..
-rw-rw-r-- 1 romano romano    0 May 17 18:48 a
-rw-rw-r-- 1 romano romano    0 May 17 18:48 b