当前位置: 代码迷 >> 综合 >> 文件属性(二)——获取文件属性的函数:stat、lstat、fstat
  详细解决方案

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

热度:71   发布时间:2024-01-11 03:53:49.0

获取文件属性的函数: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);

  相关解决方案