2013-10-04 34 views
1

我只是無法理解,爲什麼readdir()列出「..」作爲目錄中的文件之一。
以下是我的代碼片斷爲什麼readdir()列出「..」作爲文件之一?

while((dir = readdir(d)) != NULL) 
{ 
    printf("%s \n", dir->d_name); //It displayed .. once and rest of the time file names 
} 
+1

'..'是表示父目錄的文件,它存在於所有目錄中。 – mshildt

+1

@epicbrew我可能是錯的,但我認爲它通常也存在於根中;它只是指向自己的樹中的一個循環。完全不相干,繼續。 – mfrankli

+0

@mfrankli你是對的。 – mshildt

回答

3

的一...代表當前和父目錄,並存在於所有目錄中(請參閱下面的腳註)。 readdir()不會將它們過濾掉,因爲它們是目錄中的有效條目。您可以執行以下操作將其自行濾除。

while((dir = readdir(d)) != NULL) 
{ 
    if (strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0) { 
     continue; 
    } 
    printf("%s \n", dir->d_name); 
} 

注:從技術上講,SUSv3不要求...實際上所有目錄中出現,但要求操作系統執行正確解釋它們在路徑中遇到。

+0

雅我已經做了strcmp看到它在某處stackoverflow。但是不知道..的解釋。 。感謝澄清。 – SPB

3

..實際上不是一個文件,它是* nix的文件系統的目錄。它表示當前目錄的父目錄。同樣.是當前目錄的表示。這與移動文件樹和相關目錄表示相關。

看看這篇文章changing directories

一個cd ..告訴你的系統立即上升到上面的目錄 在您當前的工作

+0

其實目錄是* nix中的文件。一切都是* nix中的文件。請參閱[這裏的更多細節](http://www.tldp.org/LDP/intro-linux/html/sect_03_01.html) – mshildt

+0

@epicbrew:是的,但目錄*條目*不是文件;相反,他們指的是文件。 –

+0

@KeithThompson真,點了。 – mshildt

0

readdir()讀取下一個目錄條目。 ..是一個目錄條目。

相關問題