目录IO
目录IO
#include <sys/types.h>
基本系统数据类型
是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型。
#include <dirent.h>
是POSIX.1标准定义的unix类目录操作的头文件,包含了许多UNIX系统服务的函数原型,例如opendir函数、readdir函数.
目录IO与文件IO函数的比较
目录IO | 文件IO |
---|---|
opendir 只能打开目录 mkdir 创建目录 | open |
readdir 读目录 | read |
rewinddir 调整位置指针 telldir seekdir | rewind ftell fseek |
closedir****:关闭目录 | close |
1. opendir
DIR *opendir(const char *pathname) ;
参数:打开的目录以及路径
返回值:成功返回目录流指针,出错返回NULL。
2.int mkdir(const char * path, mode_t mode)
参数:
path为欲创建的目录文件路径,
mode为该目录的访问权限
返回值:若目录创建成功,则返回0;否则返回-1
生成的目录权限仍和umask有关系。
3.readdir
struct dirent *readdir(DIR *dr);//每次读将目录流指针向后移动一个单位
参数:目录流指针
返回值:成功则为struct dirent指针,若在目录尾或出错则返回NULL。
struct dirent定义在头文件dirent.h中。
此结构至少包含下列两个成员:
struct dirent
{
ino_t d_ino; // inode 号(文件身份证) 可以通过 `ls -li` 进行查看
char d_name[NAME_MAX+1]; //文件名
}
例子:
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
int main(int argc, char* argv[]){
DIR *dp = opendir(argv[1]);
struct dirent *dir = NULL;
while((dir=readdir(dp))!=NULL){
printf("ino is %ld===name is %s\n", dir->d_ino,dir->d_name);
}
losedir(dp);
}
4.rewinddir telldir seekdir 重设指针
void rewinddir(DIR *dr);
参数:目录流指针
long telldir(DIR *dirp)
参数:目录流指针
返回值:目录流当前位置
void seekdir(DIR *dirp , long loc)
类似于文件定位函数fseek(),在目录流上设置下一个readdir()操作的位置。
参数:目录流指针和偏移量
5.closedir
int close(DIR *dr);
参数:目录流指针
返回值:成功返回 0,出错返回- 1。