Linux学习中,每天学习一点点,你就是下一个Linux专家
一、Linux系统编程之文件系统
文件系统需要了解相关概念:inode,dentry,数据存储,文件系统
Inode:
其本质为结构体,存储文件的属性信息,如权限,属性,时间,块位置....,也叫作文件属性管理结构
如下是文件和Inode和磁盘的存储关系:
![ec7184c38428ccb3af3458e522c84828.png](https://i-blog.csdnimg.cn/blog_migrate/d146c70a89c8aaf01999e24f4ae64015.jpeg)
dentry,inode和磁盘之间的关系
备注:磁盘空间不会被删除,格式化磁盘数据也无法删除,只能覆盖磁盘
Dentry:
Dentry一个文件名和一个inode,组合起来就是dentry,如上图
二、Stat函数
获取文件属性,(从Inode结构体中获取)
Int stat(const char *path, struct *buf);成功返回0;失败返回 -1设置errno 为恰当值。
参数1: 文件名
参数2:inode 结构体指针(传出参数)
文件属性将通过传出参数返回给调用者。
在 linux 输入 man stat 可以看到该函数的原型。
如下函数可以尝试看stat的用法
#include
#include
#include
#include//需要引用此头文件
Int main(int argc, char *argv[]){
Strcut stat buf;
int ret = stat(argv[1], &buf);
If(ret == -1)
{
perror(“stat error”);
exit(1);
}
//如下打印stat各个属性,也可以获取其它文件属性
printf(“file size of=%ld”,buf.st_size); //获取文件大小
}
如下是struct stat的结构,可以通过上面的printf函数打印出来各个文件如下属性:
![d1b85b1e93c5fd1ef23960dc7113b853.png](https://i-blog.csdnimg.cn/blog_migrate/0f46710e9703d99d8a38b2a6c04520c5.jpeg)
stat函数中struct *buf传出结构里的属性值