linux中c实现打开遍历目录,其中dir指向的结构是由内核来维护的,因此文件夹内文件的变动可看到,如下示例:
在当前目录创建了cJSON文件夹并在其中创建了一个cJSON.o的文件,来验证dir的结构是否会更新。
/*************************************************************************
> File Name: dir_test.c
> Created Time: Tue 18 Jun 2019 10:53:29 AM CST
************************************************************************/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<dirent.h>
#include<sys/types.h>
int main()
{
DIR *dir;
struct dirent *ptr;
char *path = "./cJSON";
if ((dir=opendir(path)) == NULL)
{
perror("Open dir error...");
exit(1);
}
while ((ptr=readdir(dir)) != NULL)
{
if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0) ///current dir OR parrent dir
continue;
else if(ptr->d_type == 8) ///file
printf("file name:%s\n", ptr->d_name);
else if(ptr->d_type == 10) ///link file
{
printf("link name:%s\n", ptr->d_name);
}
else if(ptr->d_type == 4) ///dir
{
printf("dir name:%s\n", ptr->d_name);
}
}
puts("------------------------------------");
system("mv ./cJSON/cJSON.o ./cJSON/cJSON.o.bak");
seekdir(dir, 0);
while ((ptr=readdir(dir)) != NULL)
{
if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0) ///current dir OR parrent dir
continue;
else if(ptr->d_type == 8) ///file
printf("file name:%s\n", ptr->d_name);
else if(ptr->d_type == 10) ///link file
{
printf("link name:%s\n", ptr->d_name);
}
else if(ptr->d_type == 4) ///dir
{
printf("dir name:%s\n", ptr->d_name);
}
}
closedir(dir);
return 0;
}