Linux 目录流管理
目录
1. 打开/关闭文件
1). 打开目录 / opendir
作用:
打开一个目录,将其与目录流联系起来,方便后续的操作头文件:
#include <dirent.h>
函数原型:
DIR *opendir(const char *name)
参数:
name: 欲打开的目录名(可包含路径)
DIR为一个结构体:typedef struct __dirstream DIR
对用户透明,无需关系其内容
返回值:
成功:返回目录流
失败:返回NULL
错误码:见errno相似函数:
FILE *fdopendir(int fd, const char *mode) //通过目录描述符打开文件
2). 关闭文件 / fclose
作用:
关闭一个已经打开的目录头文件:
#include <dirent.h>
函数原型:
int closedir(DIR *dirp)
参数:
- dirp: 打开目录时候返回的流指针(DIR *)
- 返回值:
成功:0
失败:-1
2. 读/写目录流
1). 目录流-读 / readdir & readdir_r
①. readdir
作用:
读取目录流信息头文件:
#include <dirent.h>
函数原型:
struct dirent *readdir(DIR *dirp)
参数:
dirp: 目录流
struct dirent:
struct dirent { ino_t d_ino; /* inode number */ off_t d_off; /* not an offset; see NOTES */ unsigned short d_reclen; /* length of this record */ unsigned char d_type; /* type of file; not supported by all file system types */ char d_name[256]; /* filename */ };
d_type的宏定义:
Macro Description DT_BLK This is a block device DT_CHR This is a character device DT_DIR This is a directory DT_FIFO This is a named pipe (FIFO) DT_LNK This is a symbolic link DT_REG This is a regular file DT_SOCK This is a UNIX domain socket DT_UNKNOWN The file type is unknown If the file type could not be determined, the value DT_UNKNOWN is returned in d_type.
- 返回值:
成功:dirent结构体指针
失败:NULL
②. readdir_r
作用:
读取目录流信息(多线程安全)头文件:
#include <dirent.h>
函数原型:
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)
参数:
- dirp: 打开的目录流
- entry:
- result: 读取到的信息存储到该缓存中返回
- 返回值:
成功:0
失败:-1
3. 目录流定位
1). telldir
作用:
获取当前的读写位置头文件:
#include <dirent.h>
函数原型:
long telldir(DIR *dirp)
参数:
dir: 目录流
- 返回值:
成功:当前指针的位置
失败:-1
2). seekdir
作用:
修改当前的读写位置头文件:
#include <dirent.h>
函数原型:
void seekdir(DIR *dirp, long loc)
参数:
- dirp: 目录流
- loc: 从telldir()获取的目录流位置
- 返回值:
无返回值
3). rewinddir
作用:
将目录流指针指向开始位置头文件:
#include <dirent.h>
函数原型:
void rewinddir(DIR *dirp)
参数:
dirp: 目录流
- 返回值:
无返回值
4. 添加/删除目录
1). mkdir
作用:
创建一个新的目录头文件:
#include <sys/stat.h>
函数原型:
int mkdir(const char *pathname, mode_t mode)
参数:
pathname: 创建的目录名
mode: 创建目录的访问权限
mode = mode & ~umask
- 返回值:
成功:0
失败:-1
2). mkdir
作用:
删除一个目录头文件:
#include <unistd.h>
函数原型:
int rmdir(const char *pathname)
参数:
- pathname: 删除的目录名
- 返回值:
成功:0
失败:-1
5. 工作路径
1). 获取当前工作路径 / getcwd
作用:
获取当前工作路径头文件:
#include <unistd.h>
函数原型:
char *getcwd(char *buf, size_t size) char *getwd(char *buf) char *get_current_dir_name(void)
参数:
- buf: 暂存现工作路径
- size: buf的大小
- 返回值:
成功:当前工作路径
失败:NULL
2). 修改当前工作路径 / chdir
作用:
修改当前工作路径头文件:
#include <unistd.h>
函数原型:
int chdir(const char *path) int fchdir(int fd)
参数:
- path: 目标工作路径
- fd: dir描述符
- 返回值:
成功:0
失败:-1