读目录
对某个目录具有存取许可权的任一用户都可读该目录,但是只有内核才能写目录(防止文件系统发生混乱)。一个目录的写许可权位和执行许可权位决定了在该目录中能否创建新文件以及删除文件,他们并不表示能否写目录本身。
目录的实际格式依赖于unix的具体实现。
#include<sys/types.h>
#include<dirent.h>
DIR *opendir(const char *pathname);
//返回:若成功则为指针 若出错则为NULL
struct dirent *readdir(DIR *dp);
//返回:若成功则为指针 若在目录尾或出错则为NULL
void rewinddir(DIR *dp);
int closedir(DIR *dp);
定义在头文件
struct dirent{
ino_t d_ino; //i-node number
char d_name(NAME_MAX+1); //null-terminated filename
}
POSX. 1 并没有定义d_ino,因为这是一个实现特征。POSIX. 1在此结构中只定义d_name项
POSX.1并没有定义将NAME_MAX定义为一个常数——其值依赖于该目录所在的文件系统,并且通常可用fpathconf函数取得。在BSD类文件系统中,NAME_MAX的常用值255。但是,因为文件名是以NULL字符结束的,所以在头文件中如何定义数组d_name并无多大关系。
DIR结构是一个内部结构,他由这四个函数用来保存正被读的目录的有关信息。其作用类似于FIFE结构。FIFE结构由标准I/O库维护。
由opendir返回的指向DIR结构的指针由另外三个函数使用。opendir执行初始化操作,使第一个readdir读目录中的第一个目录项。目录中各目录项的顺序与实现有关,他们通常并不按字母顺序排序。
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<dirent.h>
int main(){
DIR *dir = opendir("./");
if(dir==NULL){
printf("Open directory fail\n");
return 0;
}
struct dirent *de;
while((de=readdir(dir))!=NULL)
{
printf("%s\n",de->d_name);
printf("end\n");
}
closedir(dir);
return 0;
//output : 显示当前文件夹的硬连接 就是说 我当前文件夹 有 p1 p1.c p2 p2.c p3 p3.c
// . 指的是自己 而 ..指的是自己的父文件夹
/*
p1
end
p2.c
end
..
end
p2
end
p1.c
end
.
end
p3.c
end
p3
end
*/
}