C中的"双点"目录名?

noo*_*see 3 c macos opendir

我正在为课程编写一个程序,我想知道一些代码的输出.我有一些像这样的代码:

DIR* dir = opendir(".");
struct dirent* reader;

while ((reader = readdir(dir)) != NULL)
{
//print the name of the path found by reader.
}
Run Code Online (Sandbox Code Playgroud)

现在这个工作正常,但我注意到前两个列表总是:

.
..
//rest of files here
Run Code Online (Sandbox Code Playgroud)

现在我假设第一个点.只是当前目录的名称,但第二个双点是什么?我知道cd ..让你进入文件层次结构,但我不知道为什么在读取子目录名时输出.

我担心的原因是因为我想递归遍历所有文件,但是如果我通过它..,那里的第一个目录名称.会导致循环.那我怎么能避免这个呢?

Can*_*ice 6

..是父目录.除非您在文件系统根目录,否则它与根目录相同.

基本上你想检查你的dir变量是否等于.或者...如果是,则跳过该目录.

您可以通过将该检查放入while循环中,或者从您的目录数组中过滤掉这两个目录来实现此目的.

哦,请确保您不会意外跳过以...开头的目录.,因为这些目录仍然是有效的.确保整个目录名称是....