文件和目录

优质
小牛编辑
140浏览
2023-12-01

文件和目录操作接口

函数

int open (const char *file, int flags,...)
 打开文件
 
int close (int fd)
 关闭文件
 
int read (int fd, void *buf, size_t len)
 读取数据
 
int write (int fd, const void *buf, size_t len)
 写入数据
 
int rename (const char *old, const char *new)
 重命名
 
int unlink (const char *pathname)
 删除文件
 
int stat (const char *file, struct stat *buf)
 取得状态
 
int fstat (int fildes, struct stat *buf)
 取得文件状态
 
int fsync (int fildes)
 同步文件数据到存储设备
 
int statfs (const char *path, struct statfs *buf)
 查询文件系统相关信息
 
int mkdir (const char *path, mode_t mode)
 创建目录
 
int rmdir (const char *pathname)
 删除目录
 
DIR * opendir (const char *name)
 打开目录
 
struct dirent * readdir (DIR *d)
 读取目录
 
long telldir (DIR *d)
 获取目录流的读取位置
 
void seekdir (DIR *d, off_t offset)
 设置下次读取目录的位置
 
void rewinddir (DIR *d)
 重设目录流的读取位置为开头位置
 
int closedir (DIR *d)
 关闭目录
 
int access (const char *path, int amode)
 检查文件是否存在
 

详细描述

文件和目录操作接口

函数说明

int open(const char * file,
int flags,
 ... 
)

打开文件

此函数是POSIX兼容版本,它将打开文件并根据指定的标志返回文件描述符。

参数
file打开或创建的文件名
flags指定打开文件的方式

当前支持的打开方式有以下几种:

flags描述
O_RDONLY只读方式打开
O_WRONLY只写方式打开
O_RDWR以读写方式打开
O_CREAT如果要打开的文件不存在,则建立该文件
O_APPEND当读写文件时会从文件尾开始移动,也就是说写入的数据会以附加的方式添加到文件的尾部。
O_TRUNC如果文件已经存在,则清空文件中的内容
返回
成功则返回打开文件描述符, 失败则返回-1,错误代码将存入当前线程的errno中。
示例:
opendir_sample.c , 以及 readwrite_sample.c.
int close(int fd)

关闭文件

此函数是POSIX兼容版本,它将关闭指定的文件。

参数
fd文件描述符
返回
成功 0,失败 -1,错误代码将存入当前线程的errno中。
示例:
readwrite_sample.c.
int read(int fd,
void * buf,
size_t len 
)

读取数据

该函数接口会把参数fd 所指的文件的len 个字节读取到buf 指针所指的内存中, 文件的读写位置会随读取到的字节移动。

参数
fd文件描述符
buf读取数据将要写入的缓存地址指针
len读取文件的字节数
返回
实际读取到的字节数。 有两种情况会返回0值,一是读取数据已到达文件结尾, 二是无可读取的数据(例如设定len为0)。读取失败则返回-1,错误代码将存入当前线程的errno中。
示例:
readwrite_sample.c.
int write(int fd,
const void * buf,
size_t len 
)

写入数据

函数接口会把buf 指针所指向的内存中len 个字节写入到参数fd 所指向的文件内, 文件的读写位置会写入的字节移动。

参数
fd文件描述符
buf预写入数据的地址指针
len预写入文件的字节数
返回
实际写入文件的字节数,失败则返回-1,错误代码将存入当前线程的errno中。
示例:
readwrite_sample.c.
int rename(const char * old,
const char * new 
)

重命名

该函数会将参数old 所指定的文件名称改为参数new 所指的文件名称。若new 所指定的文件已经存在,则该文件将会被覆盖。

参数
old旧文件名
new新文件名
返回
0 成功,-1 失败,错误代码将存入当前线程的errno中。
注解
: 旧文件名和新文件名必须属于同一文件系统。
示例:
rename_sample.c.
int unlink(const char * pathname)

删除文件

该函数可删除指定目录下的文件。

参数
pathname指定删除文件的绝对路径
返回
0 成功,-1 失败,错误代码将存入当前线程的errno中。
int stat(const char * file,
struct stat * buf 
)

取得状态

调用此函数可获得文件状态。

参数
file文件名
buf结构指针,指向一个存放文件状态信息的结构体
返回
0 成功,-1 失败,错误代码将存入当前线程的errno中。
示例:
stat_sample.c.
int fstat(int fildes,
struct statbuf 
)

取得文件状态

该函数用来将参数fildes所指的文件状态,复制到参数buf所指的结构中(struct stat)。

参数
fildes已打开的文件的文件描述符
buf结构指针,指向一个存放文件状态信息的结构体
返回
成功则返回0,失败返回-1,错误代码将存入当前线程的errno中。
注解
本函数与 stat() 函数相似,不同的是,它是作用于已打开的文件的文件描述符而不是文件名。
int fsync(int fildes)

同步文件数据到存储设备

该函数可以同步内存中所有已修改的文件数据到储存设备。

参数
fildes文件描述符
返回
RT_EOK 同步文件成功,-RT_ERROR 同步文件失败
int statfs(const char * path,
struct statfs * buf 
)

查询文件系统相关信息

参数
path需要查询信息的文件系统的文件路径名
buf用于储存文件系统相关信息的结构体指针
返回
成功 0,失败 -1,错误代码将存入当前线程的errno中。
int mkdir(const char * path,
mode_t mode 
)

创建目录

参数
path目录的绝对地址
mode创建模式,当前未启用,填入默认参数0x777即可。
返回
成功 0,失败 -1,错误代码将存入当前线程的errno中。
int rmdir(const char * pathname)

删除目录

参数
pathname需要删除目录的绝对路径
返回
成功 0,失败 -1,错误代码将存入当前线程的errno中。
DIR* opendir(const char * name)

打开目录

参数
name目录的绝对地址
返回
打开文件成功,返回指向目录的DIR结构指针, 失败则返回 NULL。
示例:
opendir_sample.c, readdir_sample.c , 以及 tell_seek_dir_sample.c.
struct dirent* readdir(DIR * d)

读取目录

该函数用来读取目录,每读取一次目录,目录流的指针位置将自动往后递推1个位置。

参数
d目录路径名
返回
读取成功返回保存目录信息的结构体指针,读取失败则返回NULL。
示例:
readdir_sample.c , 以及 tell_seek_dir_sample.c.
long telldir(DIR * d)

获取目录流的读取位置

该函数的返回值记录着一个目录流的当前位置,此返回值代表距离目录文件开头的 偏移量,返回值返回下个读取位置。你可以在随后的seekdir() 函数调用中利用这个值 来重置目录扫描到当前位置。也就是说telldir() 函数可以和seekdir() 函数配合使用, 重新设置目录流的读取位置到指定的偏移量。

参数
d目录路径名
返回
读取位置的偏移量
示例:
tell_seek_dir_sample.c.
void seekdir(DIR * d,
off_t offset 
)

设置下次读取目录的位置

该函数用来设置参数d目录流目前的读取位置,在调用readdir() 时便从此新位置开始读取。

参数
d目录路径名
offset偏移值,距离本次目录的位移
示例:
tell_seek_dir_sample.c.
void rewinddir(DIR * d)

重设目录流的读取位置为开头位置

该函数可以用来设置 d 目录流目前的读取位置为目录流的初始位置。

参数
d目录路径名
int closedir(DIR * d)

关闭目录

该函数用来关闭一个目录,该函数必须和opendir() 函数成对使用。

参数
d目录路径名
返回
成功 0,失败 -1,错误代码将存入当前线程的errno中。
示例:
opendir_sample.c, readdir_sample.c , 以及 tell_seek_dir_sample.c.
int access(const char * path,
int amode 
)

检查文件是否存在

该函数将根据amode中包含的位模式检查由path参数指向的路径名所指定的文件。

参数
path指定的文件/目录路径
amode该值可以是要检查的访问权限(R_OK,W_OK,X_OK)或存在测试(F_OK)
返回
允许访问请求,则返回0; 否则返回-1。