文件属性(二)——获取文件属性的函数:stat、lstat、fstat

获取文件属性的函数:stat、lstat、fstat

这三个是兄弟函数,实现的功能相同,只是略微有区别,我们只要把stat函数搞清楚了,lstat,fstat非常容易理解。

ls命令其实就是调用了这三个函数中的lstat来实现的,我们可以调用lstat函数来自己实现一个ls命令

为什么要讲stat、lstat、fstat函数?

将这三个函数,重点不是实现ls命令,而是通过这三个函数的学习,掌握用法,和理解文件的各种属性

stat

1.函数功能

功能就是获取文件的属性信息

每个文件的属性信息,都是存储在块设备上,该文件有自己的inode节点空间

调用stat函数时,文件系统通过stat给的path,到块设备上索引到该文件的inode节点空间,然后将里面的文件属性信息读到应用程序的缓冲区中,如此得到文件信息。

2.文件属性数据中转的过程

应用缓存<——stat函数提供的内核缓存<——驱动程序的缓存<——块设备上的inode

3.返回值

成功返回0,失败返回-1

4.参数说明

int stat(const char *pathname, struct stat *statbuf);

  1. const char *pathname:文件路径名
  2. struct stat *statbuf:应用缓存,用于存放读到文件属性信息
  • 缓存的类型为struct stat,通过man 2 stat,可以查看到struct stat结构体类型

所得到的文件基本信息的结果struct stat的结构如下:

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 */ 
	blksize_t st_blksize; /* blocksize for file system I/O */ 
	blkcnt_t st_blocks;   /* number of 512B blocks allocated */ 
	/* 文件的时间 */
	//最后一次访问的时间
	time_t st_atime;    /* time of last access */ 
	//最后一次修改的时间
	time_t st_mtime;    /* time of last modification */ 
	//最后一次属性修改的时间,如权限被修改,文件所有者(属主)被修改
	time_t st_ctime;    /* time of last status change */ 
};

5.代码演示

实现一个自己的ls命令(my_ls),将制定文件的属性信息打印出来

stat("./file", &sta);

int fstat(int fd, struct stat *statbuf);
int lstat(const char *pathname, struct stat *statbuf);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值