MS-RTOS 文件 IO

更新时间:
2023-08-09
下载文档

MS-RTOS 文件 IO

本章将介绍 MS-RTOS 文件 IO 相关接口的使用。

文件操作编程接口

MS-RTOS IO 子系统管理了 MS-RTOS 上的各种各样的设备,同时隔离了不同文件系统上层与底层接口的差异,上层可以使用统一的类 posix 的 API 操作设备和读写文件、目录、设备。

文件 IO 相关数据类型

类型描述
ms_mode_t文件模式类型
mode_tposix 文件模式类型
ms_off_t文件偏移量类型
off_tposix 文件偏移量类型
ms_dev_t设备号类型
dev_tposix 设备号类型
ms_stat_t文件状态类型
struct statposix 文件状态类型
ms_fd_set_t文件描述符集类型
fd_setposix 文件描述符集类型
ms_dirent_t目录项类型
struct direntposix 目录项类型
MS_DIR目录流类型
DIRposix 目录流类型
ms_statvfs_t文件系统状态类型
ms_nfds_t文件描述符集数量类型
nfds_tposix 文件描述符集数量类型
ms_pollevent_tpoll 事件类型
ms_pollfd_tpoll 文件描述符类型
struct pollfdposix poll 文件描述符类型

ms_stat_t 与 struct stat

ms_stat_tstruct stat 类型定义如下:

typedef struct stat {
    dev_t       st_dev;     /* ID of device containing file */
    ino_t       st_ino;     /* inode number */ 
    mode_t      st_mode;    /* protection */
    nlink_t     st_nlink;   /* number of hard links */
    uid_t       st_uid;     /* user ID of owner */
    gid_t       st_gid;     /* group ID of owner  */
    dev_t       st_rdev;    /* device ID (if special file) */
    off_t       st_size;    /* total size, in bytes */
    time_t      st_atime;   /* time of last access */
    long        st_spare1; 
    time_t      st_mtime;   /* time of last modification */
    long        st_spare2;
    time_t      st_ctime;   /* time of last status change */
    long        st_spare3; 
    blksize_t   st_blksize; /* blocksize for filesystem I/O */
    blkcnt_t    st_blocks;  /* number of blocks allocated */
    long        st_spare4[2];
} ms_stat_t;
参数说明
st_dev文件所在的设备的 ID
st_inoinode 号
st_mode文件的访问模式
st_nlink文件的硬链接数量
st_uid文件拥有者的用户 ID
st_gid文件拥有者的组 ID
st_rdev特殊文件的设备 ID
st_size文件总大小
st_atime文件最后一次访问的时间
st_mtime文件最后一次修改的时间
st_ctime文件最后一次状态改变的时间
st_blksize文件系统 IO 传输的块大小
st_blocks文件占用的文件系统块数量

ms_fd_set_t 与 fd_set

ms_fd_set_tfd_set 可用以下的宏来进行操作:

类型描述
FD_SET(n, p)把文件描述符设置到文件描述符集
FD_CLR(n, p)把文件描述符从文件描述符集中清除
FD_ISSET(n, p)判断文件描述符是否在文件描述符集中设置
FD_ZERO(p)清零文件描述符集

ms_dirent_t 与 struct dirent

ms_dirent_tstruct dirent 类型定义如下:

typedef struct dirent {
    char            d_name[MS_IO_NAME_BUF_SIZE];

#define DT_UNKNOWN  0U
#define DT_FIFO     1U
#define DT_CHR      2U
#define DT_DIR      4U
#define DT_BLK      6U
#define DT_REG      8U
#define DT_LNK      10U
#define DT_SOCK     12U
#define DT_WHT      14U
    ms_uint8_t      d_type;
} ms_dirent_t;
含义
DT_UNKNOWN0未知设备类型
DT_FIFO1FIFO 设备类型
DT_CHR2字符设备类型
DT_DIR4目录类型
DT_BLK6块设备类型
DT_REG8普通文件类型
DT_LNK10符号链接文件类型
DT_SOCK12socket 文件设备类型
DT_WHT14whiteout

ms_statvfs_t

ms_statvfs_t 类型定义如下:

typedef struct ms_statvfs {
    ms_uint32_t     f_bsize;    /* Optimal transfer block size */
    ms_uint32_t     f_frsize;   /* Allocation unit size */
    ms_uint32_t     f_blocks;   /* Size of FS in f_frsize units */
    ms_uint32_t     f_bfree;    /* Number of free blocks */
    ms_uint32_t     f_files;    /* Number of avail files */
    ms_uint32_t     f_ffree;    /* Number of free files */
    const char     *f_dev;      /* Block device path */
    const char     *f_mnt;      /* Mount point path */
    const char     *f_fsname;   /* File system name */
} ms_statvfs_t;
参数说明
f_bsize最佳的传输块大小
f_frsize分配单元大小
f_blocks分配单元数量
f_bfree空闲块数量
f_files有效的文件数
f_ffree空闲的文件数
f_dev块设备路径
f_mnt挂载点路径
f_fsname文件系统名称

ms_pollevent_t

ms_pollevent_t 类型定义如下:

含义
POLLIN0x01U普通或优先级带数据可读(等效于 POLLRDNORM | POLLRDBAND)
POLLRDNORM0x01U普通数据可读
POLLRDBAND0x01U优先级带数据可读
POLLPRI0x01U高优先级数据可读
POLLOUT0x02U普通数据可写
POLLWRNORM0x02U普通数据可写,等价于 POLLOUT
POLLWRBAND0x02U优先级带数据可写
POLLERR0x04U发生错误
POLLHUP0x08U发生挂起
POLLNVAL0x10U描述字不是一个打开的文件

ms_pollfd_t 与 struct pollfd

ms_pollfd_tstruct pollfd 类型定义如下:

typedef struct pollfd {
    /*
     * Standard fields
     */
    int             fd;                /*  The descriptor being polled         */
    ms_pollevent_t  events;            /*  The input event flags               */
    ms_pollevent_t  revents;           /*  The output event flags              */

    /*
     * Non-standard fields used internally by MS-RTOS
     */
    ms_handle_t     semcid;            /*  Semaphore used to post output event */
    ms_ptr_t        priv;              /*  For use by drivers                  */
} ms_pollfd_t;
参数说明
fd等待的文件描述符
events指定的等待事件
revents等待到的事件

文件 IO 相关 API

原生文件 IO 相关 API

下表展示了文件 IO 相关 API 在两个权限空间下是否可用:

API功能用户空间内核空间
当前工作目录
ms_io_chdir改变当前工作目录
ms_io_getcwd获得当前工作目录
文件
ms_io_creat创建文件
ms_io_open打开文件
ms_io_close关闭文件
ms_io_fcntl控制文件描述符
ms_io_fstat获得文件状态
ms_io_isatty判断是否为一个 TTY 设备
ms_io_fsync回写文件 CACHE 到磁盘
ms_io_fdatasync回写文件数据 CACHE 到磁盘
ms_io_ftruncate文件截断
ms_io_ioctlIO 控制
ms_io_dup复制文件描述符
ms_io_dup2复制文件描述符到指定的文件描述符
ms_io_lseek调整文件读写指针
ms_io_read读文件
ms_io_write写文件
ms_io_tell获得文件当前读写指针
ms_io_poll等待文件集事件
ms_io_select等待文件集事件
文件系统
ms_io_link链接文件
ms_io_rename文件重命名
ms_io_stat获得文件状态
ms_io_lstat获得文件状态
ms_io_statvfs获得文件系统状态
ms_io_unlink删除文件
ms_io_mkdir创建目录
ms_io_rmdir删除目录
ms_io_access判断文件是否可以访问
ms_io_truncate截断文件
ms_io_sync回写文件系统 CACHE 到磁盘
ms_io_mkfs格式化磁盘
ms_io_mount挂载磁盘
ms_io_mount_ex挂载磁盘
ms_io_unmount卸载挂载点
目录流
ms_io_opendir打开目录
ms_io_closedir关闭目录
ms_io_readdir_r读目录项
ms_io_rewinddir重置目录流读指针
ms_io_seekdir调整目录流读指针
ms_io_telldir获得目录流当前读指针

ms_io_chdir()

  • 描述 切换当前工作目录

  • 函数原型

int ms_io_chdir(const char *path);
  • 参数
输入/输出参数描述
[in]path需要切换到的目录路径
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_getcwd()

  • 描述 获得当前工作目录路径

  • 函数原型

char *ms_io_getcwd(char *buf, ms_size_t size);
  • 参数
输入/输出参数描述
[out]buf当前工作目录路径缓冲区
[in]size当前工作目录路径缓冲区大小
  • 返回值 成功返回当前工作目录路径缓冲区的首地址,失败返回 MS_NULL

  • 注意事项

  • 示例

ms_io_creat()

  • 描述 创建文件

  • 函数原型

int ms_io_creat(const char *path, ms_mode_t mode);
  • 参数
输入/输出参数描述
[in]path需要创建的文件路径
[in]mode文件模式
  • 返回值 成功返回文件描述符,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_open()

  • 描述 打开文件

  • 函数原型

int ms_io_open(const char *path, int oflag, ms_mode_t mode);
  • 参数
输入/输出参数描述
[in]path需要打开的文件路径
[in]oflag文件打开标志
[in]mode文件模式(创建文件时有用)
  • oflag 文件打开标志
描述
O_RDONLY只读打开
O_WRONLY只写打开
O_RDWR可读可写打开
O_APPEND追加方式打开
O_CREAT文件不存在则创建,需要第三个参数 mode 设置文件权限
O_TRUNC如果文件已存在,并且以只写或可读可写方式打开,
则将其长度截断(Truncate)为 0 字节。
O_EXCL如果同时指定了 O_CREAT,并且文件已存在,则出错返回
O_SYNC对文件的写操作将按照同步的要求完成
  • 返回值 成功返回文件描述符,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_close()

  • 描述 关闭文件

  • 函数原型

int ms_io_close(int fd);
  • 参数
输入/输出参数描述
[in]fd文件描述符
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_fcntl()

  • 描述 控制文件描述符

  • 函数原型

int ms_io_fcntl(int fd, int cmd, int arg);
  • 参数
输入/输出参数描述
[in]fd文件描述符
[in]cmd控制命令
[in]arg控制命令的参数
  • 返回值 成功时根据参数 cmd 的不同而返回不同的值,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_fstat()

  • 描述 获得文件的状态

  • 函数原型

int ms_io_fstat(int fd, ms_stat_t *buf);
  • 参数
输入/输出参数描述
[in]fd文件描述符
[out]buf文件状态
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_isatty()

  • 描述 判断文件是否为一个 TTY 设备

  • 函数原型

int ms_io_isatty(int fd);
  • 参数
输入/输出参数描述
[in]fd文件描述符
  • 返回值 1:是 TTY 设备,0:不是 TTY 设备

  • 注意事项

  • 示例

ms_io_fsync()

  • 描述 回写文件 CACHE 到磁盘

  • 函数原型

int ms_io_fsync(int fd);
  • 参数
输入/输出参数描述
[in]fd文件描述符
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_fdatasync()

  • 描述 回写文件数据 CACHE 到磁盘

  • 函数原型

int ms_io_fdatasync(int fd);
  • 参数
输入/输出参数描述
[in]fd文件描述符
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_ftruncate()

  • 描述 截断文件(修改文件长度)

  • 函数原型

int ms_io_ftruncate(int fd, ms_off_t len);
  • 参数
输入/输出参数描述
[in]fd文件描述符
[in]len需要截断为的文件长度
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_ioctl()

  • 描述 IO 控制

  • 函数原型

int ms_io_ioctl(int fd, int cmd, ms_ptr_t arg);
  • 参数
输入/输出参数描述
[in]fd文件描述符
[in]cmd控制的命令
[in]arg控制的命令参数
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_dup()

  • 描述 复制文件描述符

  • 函数原型

int ms_io_dup(int fd);
  • 参数
输入/输出参数描述
[in]fd文件描述符
  • 返回值 成功返回新的文件描述符,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_dup2()

  • 描述 复制文件描述符到指定的文件描述符

  • 函数原型

int ms_io_dup2(int fd, int to);
  • 参数
输入/输出参数描述
[in]fd文件描述符
[in]to需要复制到的文件描述符
  • 返回值 成功返回 to 描述符,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_lseek()

  • 描述 调整文件读写指针

  • 函数原型

ms_off_t ms_io_lseek(int fd, ms_off_t offset, int whence);
  • 参数
输入/输出参数描述
[in]fd文件描述符
[in]offset偏移量
[in]whence定位基准
  • 返回值 成功返回新的文件读写指针,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_read()

  • 描述 读文件

  • 函数原型

ms_ssize_t ms_io_read(int fd, ms_ptr_t buf, ms_size_t len);
  • 参数
输入/输出参数描述
[in]fd文件描述符
[out]buf数据缓冲区
[in]len需要读取的长度
  • 返回值 返回成功读取到的字节数,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_write()

  • 描述 写文件

  • 函数原型

ms_ssize_t ms_io_write(int fd, ms_const_ptr_t buf, ms_size_t len);
  • 参数
输入/输出参数描述
[in]fd文件描述符
[in]buf需要写入的数据
[in]len需要写入的长度
  • 返回值 返回成功写入的字节数,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_tell()

  • 描述 获得文件当前读写指针

  • 内联函数实现 等价于如下的 ms_io_lseek 调用

static MS_FORCE_INLINE ms_off_t ms_io_tell(int fd)
{
    return ms_io_lseek(fd, 0, SEEK_CUR);
}
  • 参数
输入/输出参数描述
[in]fd文件描述符
  • 返回值 成功返回文件当前读写指针,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_poll()

  • 描述 poll 等待文件集事件

  • 函数原型

int ms_io_poll(ms_pollfd_t *fds, ms_nfds_t nfds, int timeout);
  • 参数
输入/输出参数描述
[in]fdspoll 文件描述符数组
[in]nfdsfds 数组的元素个数
[in]timeout超时值
  • 返回值 成功返回等到的描述符数量,超时返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_select()

  • 描述 select 等待文件集事件

  • 函数原型

int ms_io_select(int maxfd, ms_fd_set_t *readfds, ms_fd_set_t *writefds, 
                   ms_fd_set_t *errorfds, ms_timeval_t *timeout);
  • 参数
输入/输出参数描述
[in]maxfd文件描述符列表中最大文件描述符加 1
[in]readfds读文件描述符集
[in]writefds写文件描述符集
[in]errorfds异常文件描述符集
[in]timeout等到超时时间
  • 返回值 成功返回等到的文件描述符数量,超时返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_link()

  • 描述 链接文件

  • 函数原型

int ms_io_link(const char *path1, const char *path2);
  • 参数
输入/输出参数描述
[in]path1文件路径
[in]path2需要创建的链接文件
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_rename()

  • 描述 文件重命名(移动文件)

  • 函数原型

int ms_io_rename(const char *old, const char *_new);
  • 参数
输入/输出参数描述
[in]old旧的文件路径
[in]_new新的文件路径
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_stat()

  • 描述 获得文件状态

  • 函数原型

int ms_io_stat(const char *path, ms_stat_t *buf);
  • 参数
输入/输出参数描述
[in]path文件路径
[out]buf文件状态
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_lstat()

  • 描述 获得文件状态,如果文件是符号链接,则获得符号链接本身的状态

  • 函数原型

int ms_io_lstat(const char *path, ms_stat_t *buf);
  • 参数
输入/输出参数描述
[in]path文件路径
[out]buf文件状态
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_statvfs()

  • 描述 获得文件系统状态

  • 函数原型

int ms_io_statvfs(const char *path, ms_statvfs_t *buf);
  • 参数
输入/输出参数描述
[in]path挂载点的路径
[out]buf文件系统状态
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_unlink()

  • 描述 删除文件

  • 函数原型

int ms_io_unlink(const char *path);
  • 参数
输入/输出参数描述
[in]path文件路径
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_mkdir()

  • 描述 创建目录

  • 函数原型

int ms_io_mkdir(const char *path, ms_mode_t mode);
  • 参数
输入/输出参数描述
[in]path需要创建的目录路径
[in]mode目录模式
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_rmdir()

  • 描述 删除目录

  • 函数原型

int ms_io_rmdir(const char *path);
  • 参数
输入/输出参数描述
[in]path需要删除的目录路径
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_access()

  • 描述 判断文件是否可以以指定的访问模式来访问

  • 函数原型

int ms_io_access(const char *path, int amode);
  • 参数
输入/输出参数描述
[in]path文件路径
[in]amode访问模式
  • 返回值 可以访问返回 0,不能访问返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_truncate()

  • 描述 截断文件(修改文件长度)

  • 函数原型

int ms_io_truncate(const char *path, ms_off_t len);
  • 参数
输入/输出参数描述
[in]path文件路径
[in]len需要截断为的文件长度
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_sync()

  • 描述 回写文件系统 CACHE 到磁盘

  • 函数原型

int ms_io_sync(void);
  • 参数

  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_mkfs()

  • 描述 格式化磁盘

  • 函数原型

ms_err_t ms_io_mkfs(const char *path, ms_const_ptr_t param);
  • 参数
输入/输出参数描述
[in]path挂载点路径
[in]param格式化参数
  • 返回值 MS-RTOS 错误码

  • 注意事项 仅内核态可用

  • 示例

ms_io_mount()

  • 描述 挂载磁盘

  • 函数原型

ms_err_t ms_io_mount(const char *mnt_path, const char *dev_path, const char *fs_name, ms_const_ptr_t param);
  • 参数
输入/输出参数描述
[in]mnt_path挂载点路径
[in]dev_path设备路径
[in]fs_name文件系统名称
[in]param挂载参数
  • 返回值 MS-RTOS 错误码

  • 注意事项 仅内核态可用

  • 示例

ms_io_mount_ex()

  • 描述 挂载磁盘

  • 函数原型

ms_err_t ms_io_mount_ex(const char *mnt_path, const char *dev_path, const char *fs_name, ms_const_ptr_t param,
                        ms_callback_t on_umount, ms_ptr_t on_umount_arg);
  • 参数
输入/输出参数描述
[in]mnt_path挂载点路径
[in]dev_path设备路径
[in]fs_name文件系统名称
[in]param挂载参数
[in]on_umount卸载挂载点时的回调函数
[in]on_umount_arg卸载挂载点时的回调函数参数
  • 返回值 MS-RTOS 错误码

  • 注意事项 仅内核态可用

  • 示例

ms_io_unmount()

  • 描述 卸载挂载点

  • 函数原型

ms_err_t ms_io_unmount(const char *mnt_path, ms_const_ptr_t param);
  • 参数
输入/输出参数描述
[in]mnt_path挂载点路径
[in]param卸载参数
  • 返回值 MS-RTOS 错误码

  • 注意事项 仅内核态可用

  • 示例

ms_io_opendir()

  • 描述 打开目录

  • 函数原型

MS_DIR *ms_io_opendir(const char *path);
  • 参数
输入/输出参数描述
[in]path需要打开的目录路径
  • 返回值 成功返回目录流指针,失败返回 MS_NULL

  • 注意事项

  • 示例

ms_io_closedir()

  • 描述 关闭目录流

  • 函数原型

int ms_io_closedir(MS_DIR *dir);
  • 参数
输入/输出参数描述
[in]dir目录流指针
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_readdir_r()

  • 描述 读目录项

  • 函数原型

int ms_io_readdir_r(MS_DIR *dir, ms_dirent_t *entry, ms_dirent_t **result);
  • 参数
输入/输出参数描述
[in]dir目录流指针
[out]entry目录项信息
[out]result指向 entry 地址或 MS_NULL
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项 MS-RTOS 内核没有提供的不可重入函数 ms_io_readdir

  • 示例

ms_io_rewinddir()

  • 描述 重置目录流读指针

  • 函数原型

int ms_io_rewinddir(MS_DIR *dir);
  • 参数
输入/输出参数描述
[in]dir目录流指针
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_seekdir()

  • 描述 调整目录流读指针

  • 函数原型

int ms_io_seekdir(MS_DIR *dir, long loc);
  • 参数
输入/输出参数描述
[in]dir目录流指针
[in]loc需要调整到的位置
  • 返回值 成功返回 0,失败返回 -1,并设置 errno

  • 注意事项

  • 示例

ms_io_telldir()

  • 描述 获得目录流读指针

  • 函数原型

long ms_io_telldir(MS_DIR *dir);
  • 参数
输入/输出参数描述
[in]dir目录流指针
  • 返回值 目录流的当前读指针

  • 注意事项

  • 示例

posix 兼容 IO 相关 API

MS-RTOS 的 IO 子系统还提供了 posix 兼容的文件、目录 API(当然 MS-RTOS 原生的文件、目录 API 效率更高,推荐使用 MS-RTOS 原生的文件、目录 API):

// 当前工作目录
int chdir(const char *path);
char *getcwd(char *buf, size_t size);

// 文件
int creat(const char *path, mode_t mode);
int open(const char *path, int oflag, ... /* mode */);
int close(int fd);
int fcntl(int fd, int cmd, ... /* arg */);
int fstat(int fd, struct stat *buf);
int isatty(int fd);
int fsync(int fd);
int fdatasync(int fd);
int ftruncate(int fd, off_t len);
int ioctl(int fd, int cmd, void *arg);
int dup(int fd);
int dup2(int fd, int to);
off_t lseek(int fd, off_t offset, int whence);
ssize_t read(int fd, void *buf, size_t len);
ssize_t write(int fd, const void *buf, size_t len);

// 多路 IO 复用
int poll(pollfd_t *fds, nfds_t nfds, int timeout);
int select(int maxfd, fd_set *readfds, fd_set *writefds, 
             fd_set *errorfds, struct timeval *timeout);

// 文件系统
int link(const char *path1, const char *path2);
int rename(const char *old, const char *_new);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);
int unlink(const char *path);
int mkdir(const char *path, mode_t mode);
int rmdir(const char *path);
int access(const char *path, int amode);
int truncate(const char *path, off_t len);
void sync(void);

// 目录流
DIR *opendir(const char *path);
int closedir(DIR *dir);
int readdir_r(DIR *dir, struct dirent *entry, struct dirent **result);
struct dirent *readdir(DIR *dir); // 不可重入,不推荐使用
int rewinddir(DIR *dir);
int seekdir(DIR *dir, long loc);
long telldir(DIR *dir);
文档内容是否对您有所帮助?
有帮助
没帮助