linux stat系列函数详解

本文详细介绍了Linux下用于获取文件信息的stat、fstat、lstat和fstatat函数,包括它们的作用、参数、返回值以及区别。此外,还讲解了statx函数作为stat的扩展,以及statvfs和fstatvfs函数用于获取磁盘信息。每个函数的结构体如stat和statvfs的成员及含义也进行了阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stat,fstat与lstat函数

作用: 通过文件路径获取文件信息,并保存在结构体stat中;

函数原型:

#include <sys/stat.h>
#include <unistd.h>

int stat(const char *file_name, struct stat *buf);

int fstat(int fd, struct stat *buf);

int lstat(const char *file_name, struct stat *buf);

(stat与lstat的区别:如果file_name是软连接,stat函数会获取file_name所指原文件信息,lstat函数则直接获取软连接文件信息,不会更加软连接追溯到原文件;)

返回值:

执行成功则返回0,失败返回-1,错误代码存于errno

ENOENT         参数file_name指定的文件不存在  

ENOTDIR        路径中的目录存在但却非真正的目录  

ELOOP          欲打开的文件有过多符号连接问题,上限为16符号连接  

EFAULT         参数buf为无效指针,指向无法存在的内存空间  

EACCESS        存取文件时被拒绝  

ENOMEM         核心内存不足  

ENAMETOOLONG   参数file_name的路径名称太长

stat结构体如下:

struct stat { 
dev_t st_dev; //文件的设备编号 
ino_t st_ino; //节点 
mode_t st_mode; //文件的类型和存取的权限 
nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1 
uid_t st_uid; //用户ID 
gid_t st_gid; //组ID 
dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号 
off_t st_size; //文件字节数(文件大小) 
unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小) 
unsigned long st_blocks; //块数 
time_t st_atime; //最后一次访问时间 
time_t st_mtime; //最后一次修改时间 
time_t st_ctime; //最后一次改变时间(指属性) 
};

st_mode 定义如下:

S_IFMT   0170000    文件类型的位遮罩  

S_IFSOCK 0140000    scoket  

S_IFLNK 0120000     符号连接  

S_IFREG 0100000     一般文件  

S_IFBLK 0060000     区块装置  

S_IFDIR 0040000     目录  

S_IFCHR 0020000     字符装置  

S_IFIFO 0010000     先进先出    

S_ISUID 04000     文件的(set user-id on execution)位

S_ISGID 02000     文件的(set group-id on execution)位  

S_ISVTX 01000     文件的sticky位    

S_IRUSR(S_IREAD) 00400     文件所有者具可读取权限  

S_IWUSR(S_IWRITE)00200     文件所有者具可写入权限  

S_IXUSR(S_IEXEC) 00100     文件所有者具可执行权限    

S_IRGRP 00040             用户组具可读取权限  

S_IWGRP 00020             用户组具可写入权限  

S_IXGRP 00010             用户组具可执行权限    

S_IROTH 00004             其他用户具可读取权限  

S_IWOTH 00002             其他用户具可写入权限  

S_IXOTH 0000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值