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