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

struct stat {           mode_t     st_mode;       //文件对应的模式,文件,目录等            ino_t      st_ino;        //inode节点号            dev_t      st_dev;        //设备号码            dev_t      st_rdev;       //特殊设备号码            nlink_t    st_nlink;      //文件的连接数            uid_t      st_uid;        //文件所有者            gid_t      st_gid;        //文件所有者对应的组            off_t      st_size;       //普通文件,对应的文件字节数            time_t     st_atime;      //文件最后被访问的时间            time_t     st_mtime;      //文件内容最后被修改的时间            time_t     st_ctime;      //文件状态改变时间            blksize_t st_blksize;     //文件内容对应的块大小            blkcnt_t   st_blocks;     //伟建内容对应的块数量          };  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://127.0.0.1/wyypzp.html