stat
stat 模块提供了文件状态信息查询和目录创建相关的 POSIX 标准接口,包括 stat、fstat、lstat 和 mkdir 等函数,用于获取文件属性信息及创建目录。
头文件清单:
接口清单
| 接口名称 | 功能简述 |
|---|---|
| stat | 获取指定路径文件的状态信息 |
| fstat | 获取指定文件描述符对应文件的状态信息 |
| lstat | 获取指定路径文件的状态信息(不跟踪符号链接) |
| mkdir | 创建目录 |
Functions
stat
头文件清单
功能说明
- 获取指定路径文件的状态信息,将结果写入struct stat结构体
- 当路径指向符号链接时,获取符号链接目标文件的状态信息
- 通过struct stat结构体返回文件的设备号、inode号、权限模式、大小等属性
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| pathname | const char * | 文件路径字符串指针 | 非NULL,指向有效的文件路径 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| statbuf | struct stat * | 文件状态信息结构体指针,存储获取到的文件属性 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 执行成功 | 成功获取文件状态信息 |
| -1 | 执行失败 | 文件不存在或无访问权限,errno被设置 |
fstat
头文件清单
功能说明
- 获取指定文件描述符对应文件的状态信息,将结果写入struct stat结构体
- 与stat的区别在于通过文件描述符而非路径指定文件
- 通过struct stat结构体返回文件的设备号、inode号、权限模式、大小等属性
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| fd | int | 文件描述符 | 有效的已打开文件描述符 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| statbuf | struct stat * | 文件状态信息结构体指针,存储获取到的文件属性 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 执行成功 | 成功获取文件状态信息 |
| -1 | 执行失败 | 文件描述符无效或无访问权限,errno被设置 |
lstat
头文件清单
功能说明
- 获取指定路径文件的状态信息,将结果写入struct stat结构体
- 当路径指向符号链接时,获取符号链接自身而非目标文件的状态信息
- 通过struct stat结构体返回文件的设备号、inode号、权限模式、大小等属性
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| pathname | const char * | 文件路径字符串指针 | 非NULL,指向有效的文件路径 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| statbuf | struct stat * | 文件状态信息结构体指针,存储获取到的文件属性 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 执行成功 | 成功获取文件状态信息 |
| -1 | 执行失败 | 文件不存在或无访问权限,errno被设置 |
mkdir
头文件清单
功能说明
- 创建一个新目录,目录权限由mode参数指定
- 创建的目录权限受进程umask值影响,最终权限为mode & ~umask
- 仅创建路径中最后一个目录分量,不递归创建中间目录
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| pathname | const char * | 待创建目录的路径字符串指针 | 非NULL,指向有效的目录路径 |
| mode | mode_t | 目录权限模式 | 权限位组合值,如0755 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 执行成功 | 目录创建成功 |
| -1 | 执行失败 | 路径已存在或无权限,errno被设置 |
Structures
struct stat
struct stat {
dev_t st_dev;
ino_t st_ino;
mode_t st_mode;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev;
unsigned long __pad;
#ifdef __LITEOS__
long long st_size;
#else
off_t st_size;
#endif
blksize_t st_blksize;
int __pad2;
blkcnt_t st_blocks;
struct timespec st_atim;
struct timespec st_mtim;
struct timespec st_ctim;
unsigned __unused[2];
};
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| st_dev | dev_t | 文件所在设备的设备号 |
| st_ino | ino_t | 文件的inode号 |
| st_mode | mode_t | 文件的权限模式 |
| st_nlink | nlink_t | 文件的硬链接数 |
| st_uid | uid_t | 文件所有者的用户ID |
| st_gid | gid_t | 文件所有者的组ID |
| st_rdev | dev_t | 设备文件的设备号(仅设备文件有效) |
| __pad | unsigned long | 填充字段 |
| st_size | long long / off_t | 文件大小(字节数) |
| st_blksize | blksize_t | 文件系统I/O的块大小 |
| __pad2 | int | 填充字段 |
| st_blocks | blkcnt_t | 文件分配的块数 |
| st_atim | struct timespec | 最近访问时间 |
| st_mtim | struct timespec | 最近修改时间 |
| st_ctim | struct timespec | 最近状态改变时间 |
| __unused | unsigned[2] | 保留字段 |