使用案例见链接:
linux 目录操作之找出某目录下所有的文件_伐檀(ノ`Д)ノ的博客-CSDN博客
目录操作的相关API
1,创建或删除一个空目录
NAME
mkdir, mkdirat - create a directory
SYNOPSIS
#include <sys/stat.h>
#include <sys/types.h>
mkdir用来用来创建一个空目录,该路径名为pathname,mode为该目录的权限,
目录的读的权限是指可以查看目录内容,执行的权限是指可以进入目录。
int mkdir(const char *pathname, mode_t mode);
@pathname: 要创建的目录的路径
@mode :指定目录的权限
返回值:
成功返回0
失败返回-1
NAME
rmdir - delete a directory
SYNOPSIS
#include <unistd.h>
rmdir用来删除一个空目录
int rmdir(const char *pathname);
@pathname: 指定删除的目录的路径
返回值:
成功返回0
失败返回-1
2,打开一个目录
NAME
opendir, fdopendir - open a directory
SYNOPSIS
#include <sys/types.h>
#include <dirent.h>
opendir和fdopendir都是用来打开一个目录,opendir用一个路径名来指定目录,
而fdopendir用文件描述符来指定。
DIR *opendir(const char *name);
DIR *fdopendir(int fd);
返回值:
如果成功返回一个DIR的指针,在Unix/Linux下面,目录用DIR结构体来维护
失败返回NULL,errno被设置
3,读一个目录
NAME
readdir - read a directory
SYNOPSIS
#include <dirent.h>
readdir用来从dirp指定的目录中,读取其中的目录项(struct dirent)并返回。
目录文件就是一个目录项数组,里面保存的是文件的i-node编号
struct dirent *readdir(DIR *dirp);
@dirp: 表示读哪一个目录
返回值:
如果成功返回一个目录项(struct dirent),数组下标加一。
下次再调用readdir读同一个目录,则返回下一个目录项。
如果读完了或者出错了,则返回NULL。
struct dirent {
ino_t d_ino; //该文件i-node编号
off_t d_off; //偏移量,即数组的下标
unsigned short d_reclen;//这条结构体的长度
unsigned char d_type; //该目录项对应的文件的类型
(有些文件系统可能不支持)
char d_name[256];//文件的名字(不带路径)
};
NOTE: d_ino,d_name只有这两个成员变量是被所有的系统支持的
4, closedir 关闭一个目录
NAME
closedir - close a directory
SYNOPSIS
#include <sys/types.h>
#include <dirent.h>
closedir用来关闭dirp指定的目录
int closedir(DIR *dirp);
返回值:
成功返回0
失败返回-1
5, getcwd
NAME
getcwd, getwd, get_current_dir_name - get current working directory
SYNOPSIS
#include <unistd.h>
getcws用来获取当前的工作路径(绝对路径),保存到buf指向的字符数组,数组大小为size
char *getcwd(char *buf, size_t size);
6, chdir
NAME
chdir, fchdir - change working directory
SYNOPSIS
#include <unistd.h>
chdir用来把当前路径修改为path指定的路径
int chdir(const char *path);
返回值:
成功返回0
失败返回-1
7. remove/unlink 用来删除一个文件或目录
NAME
remove - remove a file or directory
SYNOPSIS
#include <stdio.h>
int remove(const char *pathname);
NAME
unlink, unlinkat - delete a name and possibly the file it refers to
SYNOPSIS
#include <unistd.h>
int unlink(const char *pathname);