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; //伟建内容对应的块数量 };