MS-RTOS 文件 IO
本章将介绍 MS-RTOS 文件 IO 相关接口的使用。
文件操作编程接口
MS-RTOS IO 子系统管理了 MS-RTOS 上的各种各样的设备,同时隔离了不同文件系统上层与底层接口的差异,上层可以使用统一的类 posix 的 API 操作设备和读写文件、目录、设备。
文件 IO 相关数据类型
类型 | 描述 |
---|---|
ms_mode_t | 文件模式类型 |
mode_t | posix 文件模式类型 |
ms_off_t | 文件偏移量类型 |
off_t | posix 文件偏移量类型 |
ms_dev_t | 设备号类型 |
dev_t | posix 设备号类型 |
ms_stat_t | 文件状态类型 |
struct stat | posix 文件状态类型 |
ms_fd_set_t | 文件描述符集类型 |
fd_set | posix 文件描述符集类型 |
ms_dirent_t | 目录项类型 |
struct dirent | posix 目录项类型 |
MS_DIR | 目录流类型 |
DIR | posix 目录流类型 |
ms_statvfs_t | 文件系统状态类型 |
ms_nfds_t | 文件描述符集数量类型 |
nfds_t | posix 文件描述符集数量类型 |
ms_pollevent_t | poll 事件类型 |
ms_pollfd_t | poll 文件描述符类型 |
struct pollfd | posix poll 文件描述符类型 |
ms_stat_t 与 struct stat
ms_stat_t
与 struct 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_ino | inode 号 |
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_t
与 fd_set
可用以下的宏来进行操作:
类型 | 描述 |
---|---|
FD_SET(n, p) | 把文件描述符设置到文件描述符集 |
FD_CLR(n, p) | 把文件描述符从文件描述符集中清除 |
FD_ISSET(n, p) | 判断文件描述符是否在文件描述符集中设置 |
FD_ZERO(p) | 清零文件描述符集 |
ms_dirent_t 与 struct dirent
ms_dirent_t
与 struct 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_UNKNOWN | 0 | 未知设备类型 |
DT_FIFO | 1 | FIFO 设备类型 |
DT_CHR | 2 | 字符设备类型 |
DT_DIR | 4 | 目录类型 |
DT_BLK | 6 | 块设备类型 |
DT_REG | 8 | 普通文件类型 |
DT_LNK | 10 | 符号链接文件类型 |
DT_SOCK | 12 | socket 文件设备类型 |
DT_WHT | 14 | whiteout |
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
类型定义如下:
宏 | 值 | 含义 |
---|---|---|
POLLIN | 0x01U | 普通或优先级带数据可读(等效于 POLLRDNORM | POLLRDBAND) |
POLLRDNORM | 0x01U | 普通数据可读 |
POLLRDBAND | 0x01U | 优先级带数据可读 |
POLLPRI | 0x01U | 高优先级数据可读 |
POLLOUT | 0x02U | 普通数据可写 |
POLLWRNORM | 0x02U | 普通数据可写,等价于 POLLOUT |
POLLWRBAND | 0x02U | 优先级带数据可写 |
POLLERR | 0x04U | 发生错误 |
POLLHUP | 0x08U | 发生挂起 |
POLLNVAL | 0x10U | 描述字不是一个打开的文件 |
ms_pollfd_t 与 struct pollfd
ms_pollfd_t
与 struct 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_ioctl | IO 控制 | ● | ● |
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] | fds | poll 文件描述符数组 |
[in] | nfds | fds 数组的元素个数 |
[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);