Что значит '.' указать в c в качестве аргумента opendir? - PullRequest
2 голосов
/ 30 января 2020

«Это код. Что означает«. » inside "opendir ('.')" Указывает ли он на текущий каталог? "

#include <stdio.h> 
#include <dirent.h> 
int main(void) 
{ 
struct dirent *de;  // Pointer for directory entry 

// opendir() returns a pointer of DIR type.  
DIR *dr = opendir("."); 

if (dr == NULL)  // opendir returns NULL if couldn't open directory 
{ 
    printf("Could not open current directory" ); 
    return 0; 
} 


while ((de = readdir(dr)) != NULL) 
        printf("%s\n", de->d_name); 

closedir(dr);     
return 0; 
} 

Ответы [ 2 ]

7 голосов
/ 30 января 2020

Это на самом деле не связано с программированием, но больше связано с ОС.

В большинстве операционных систем файловая система имеет концепцию родительского каталога и текущего каталога.

Родительский каталог обычно используют нотацию .., в то время как текущий каталог использует нотацию ..

Так что opendir(".") сделает, чтобы открыть текущий каталог.


И как упоминалось в комментарии, «текущий» каталог не обязательно должен быть каталогом, в котором находится исполняемая программа. Это текущий рабочий каталог для процесса, который может отличаться. Это зависит от того, как и где была запущена программа, и от того, меняет ли программа свой рабочий каталог (чего нет в программе в вопросе).

2 голосов
/ 30 января 2020

Здесь

DIR *dr = opendir("."); 

. представляет текущий каталог , а .. представляет родительский каталог , здесь opendir() пытается открыть текущий каталог & в случае успеха он возвращает указатель на поток каталога.

со страницы руководства opendir

Функция opendir() открывает поток каталога, соответствующий каталогу, названному аргументом dirname. Поток каталога располагается в первой записи.

На большинстве linux машин первые две записи в каталоге являются текущими . и родительский ... Если вы запускаете команду ls в данном каталоге, она выглядит как

[root@try]# ls -lia
total 28
425985 drwxr-xr-x. 2 root root  4096 Jan 30 10:29 .       <--- current dir inode
393284 drwxr-xr-x. 3 root root 20480 Jan 30 10:28 ..      <--- parent dir inode
407821 -rw-r--r--. 1 root root     0 Jan 30 10:29 demo.c
...