我只是無法理解,爲什麼readdir()列出「..」作爲目錄中的文件之一。
以下是我的代碼片斷爲什麼readdir()列出「..」作爲文件之一?
while((dir = readdir(d)) != NULL)
{
printf("%s \n", dir->d_name); //It displayed .. once and rest of the time file names
}
我只是無法理解,爲什麼readdir()列出「..」作爲目錄中的文件之一。
以下是我的代碼片斷爲什麼readdir()列出「..」作爲文件之一?
while((dir = readdir(d)) != NULL)
{
printf("%s \n", dir->d_name); //It displayed .. once and rest of the time file names
}
的一.
和..
代表當前和父目錄,並存在於所有目錄中(請參閱下面的腳註)。 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不要求.
和..
實際上所有目錄中出現,但要求操作系統執行正確解釋它們在路徑中遇到。
雅我已經做了strcmp看到它在某處stackoverflow。但是不知道..的解釋。 。感謝澄清。 – SPB
..
實際上不是一個文件,它是* nix的文件系統的目錄。它表示當前目錄的父目錄。同樣.
是當前目錄的表示。這與移動文件樹和相關目錄表示相關。
看看這篇文章changing directories:
一個cd ..告訴你的系統立即上升到上面的目錄 在您當前的工作
看來readdir()不會忽略'..'&'。'。所以你必須自己過濾這兩個文件。 此信息對您有幫助 How to recursively list directories in C on LINUX
readdir()
讀取下一個目錄條目。 ..
是一個目錄條目。
'..'是表示父目錄的文件,它存在於所有目錄中。 – mshildt
@epicbrew我可能是錯的,但我認爲它通常也存在於根中;它只是指向自己的樹中的一個循環。完全不相干,繼續。 – mfrankli
@mfrankli你是對的。 – mshildt