跳转至

stat

stat 模块提供了文件状态信息查询和目录创建相关的 POSIX 标准接口,包括 stat、fstat、lstat 和 mkdir 等函数,用于获取文件属性信息及创建目录。

头文件清单:

#include "open_source/musl/include/sys/stat.h"

接口清单

接口名称 功能简述
stat 获取指定路径文件的状态信息
fstat 获取指定文件描述符对应文件的状态信息
lstat 获取指定路径文件的状态信息(不跟踪符号链接)
mkdir 创建目录

Functions

stat

int stat(const char *__restrict, struct stat *__restrict)

头文件清单

#include "open_source/musl/include/sys/stat.h"

功能说明

  • 获取指定路径文件的状态信息,将结果写入struct stat结构体
  • 当路径指向符号链接时,获取符号链接目标文件的状态信息
  • 通过struct stat结构体返回文件的设备号、inode号、权限模式、大小等属性

入参

名称 参数类型 详细说明 约束取值范围
pathname const char * 文件路径字符串指针 非NULL,指向有效的文件路径

出参

名称 数据类型 输出说明
statbuf struct stat * 文件状态信息结构体指针,存储获取到的文件属性

返回值

返回值 文字含义 触发场景
0 执行成功 成功获取文件状态信息
-1 执行失败 文件不存在或无访问权限,errno被设置

fstat

int fstat(int, struct stat *)

头文件清单

#include "open_source/musl/include/sys/stat.h"

功能说明

  • 获取指定文件描述符对应文件的状态信息,将结果写入struct stat结构体
  • 与stat的区别在于通过文件描述符而非路径指定文件
  • 通过struct stat结构体返回文件的设备号、inode号、权限模式、大小等属性

入参

名称 参数类型 详细说明 约束取值范围
fd int 文件描述符 有效的已打开文件描述符

出参

名称 数据类型 输出说明
statbuf struct stat * 文件状态信息结构体指针,存储获取到的文件属性

返回值

返回值 文字含义 触发场景
0 执行成功 成功获取文件状态信息
-1 执行失败 文件描述符无效或无访问权限,errno被设置

lstat

int lstat(const char *__restrict, struct stat *__restrict)

头文件清单

#include "open_source/musl/include/sys/stat.h"

功能说明

  • 获取指定路径文件的状态信息,将结果写入struct stat结构体
  • 当路径指向符号链接时,获取符号链接自身而非目标文件的状态信息
  • 通过struct stat结构体返回文件的设备号、inode号、权限模式、大小等属性

入参

名称 参数类型 详细说明 约束取值范围
pathname const char * 文件路径字符串指针 非NULL,指向有效的文件路径

出参

名称 数据类型 输出说明
statbuf struct stat * 文件状态信息结构体指针,存储获取到的文件属性

返回值

返回值 文字含义 触发场景
0 执行成功 成功获取文件状态信息
-1 执行失败 文件不存在或无访问权限,errno被设置

mkdir

int mkdir(const char *, mode_t)

头文件清单

#include "open_source/musl/include/sys/stat.h"

功能说明

  • 创建一个新目录,目录权限由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] 保留字段

Macros

st_atime

#define st_atime st_atim.tv_sec

st_mtime

#define st_mtime st_mtim.tv_sec

st_ctime

#define st_ctime st_ctim.tv_sec

S_IFMT

#define S_IFMT  0170000

S_IFDIR

#define S_IFDIR 0040000

S_IFCHR

#define S_IFCHR 0020000

S_IFBLK

#define S_IFBLK 0060000

S_IFREG

#define S_IFREG 0100000

S_IFIFO

#define S_IFIFO 0010000

S_IFLNK

#define S_IFLNK 0120000

S_IFSOCK

#define S_IFSOCK 0140000

S_TYPEISMQ

#define S_TYPEISMQ(buf)  0

S_TYPEISSEM

#define S_TYPEISSEM(buf) 0

S_TYPEISSHM

#define S_TYPEISSHM(buf) 0

S_TYPEISTMO

#define S_TYPEISTMO(buf) 0

S_ISDIR

#define S_ISDIR(mode)  (((mode) & S_IFMT) == S_IFDIR)

S_ISCHR

#define S_ISCHR(mode)  (((mode) & S_IFMT) == S_IFCHR)

S_ISBLK

#define S_ISBLK(mode)  (((mode) & S_IFMT) == S_IFBLK)

S_ISREG

#define S_ISREG(mode)  (((mode) & S_IFMT) == S_IFREG)

S_ISFIFO

#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)

S_ISLNK

#define S_ISLNK(mode)  (((mode) & S_IFMT) == S_IFLNK)

S_ISSOCK

#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)

S_ISUID

#define S_ISUID 04000

S_ISGID

#define S_ISGID 02000

S_ISVTX

#define S_ISVTX 01000

S_IRUSR

#define S_IRUSR 0400

S_IWUSR

#define S_IWUSR 0200

S_IXUSR

#define S_IXUSR 0100

S_IRWXU

#define S_IRWXU 0700

S_IRGRP

#define S_IRGRP 0040

S_IWGRP

#define S_IWGRP 0020

S_IXGRP

#define S_IXGRP 0010

S_IRWXG

#define S_IRWXG 0070

S_IROTH

#define S_IROTH 0004

S_IWOTH

#define S_IWOTH 0002

S_IXOTH

#define S_IXOTH 0001

S_IRWXO

#define S_IRWXO 0007

DEFFILEMODE

#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)

F_RDO

#define F_RDO 0x01

F_HID

#define F_HID 0x02

F_SYS

#define F_SYS 0x04

F_ARC

#define F_ARC 0x20

F_LIN

#define F_LIN 0x80

UTIME_NOW

#define UTIME_NOW  0x3fffffff

UTIME_OMIT

#define UTIME_OMIT 0x3ffffffe