Linux下文件属性的获取


1. 数据结构和系统调用

在Linux下进行C/C++编程,主要通过以下三个系统调用来获取文件(普通文件,目录,管道,socket,字符,块等)属性。

头文件“#include <sys/stat.h>”

(1) //通过文件名称获取文件属性

int stat(const char *restrict pathname, struct stat *restrict buf);

(2) //通过文件描述符获取文件属性

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

(3) //通过符号文件名称获取文件属性

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

返回值(三个函数一样)

成功:0

失败:-1

三个系统调用的区别:

1. fstat接受的第一个参数是“文件描述符”,stat和lstat是“文件全路径”,文件描述符需要用调用open之后才能得到,文件全路经直接写即可;

2. lstat获取的是该符号链接本身的信息;而stat获取的是该链接指向的文件的信息;

这三个系统调用都依赖一个重要的结构体struct stat

  1. struct stat {  
  2.         mode_t     st_mode;       //文件对应的模式,文件,目录等   
  3.         ino_t      st_ino;        //inode节点号   
  4.         dev_t      st_dev;        //设备号码   
  5.         dev_t      st_rdev;       //特殊设备号码   
  6.         nlink_t    st_nlink;      //文件的连接数   
  7.         uid_t      st_uid;        //文件所有者   
  8.         gid_t      st_gid;        //文件所有者对应的组   
  9.         off_t      st_size;       //普通文件,对应的文件字节数   
  10.         time_t     st_atime;      //文件最后被访问的时间   
  11.         time_t     st_mtime;      //文件内容最后被修改的时间   
  12.         time_t     st_ctime;      //文件状态改变时间   
  13.         blksize_t st_blksize;     //文件内容对应的块大小   
  14.         blkcnt_t   st_blocks;     //伟建内容对应的块数量   
  15.       };  
  • 1
  • 2
  • 下一页

相关内容