计算机基础实战课
彭东
网名 LMOS,Intel 傲腾项目关键开发者
19719 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
计算机基础实战课
15
15
1.0x
00:00/00:00
登录|注册

36|Linux文件系统(二):Linux如何存放文件?

你好,我是 LMOS。
通过上节课的学习,我们已经对 Ext3 文件系统的结构非常了解了。这种了解究竟正确与否,还是需要通过写代码来验证。这节课我会带你读取 Ext3 文件系统中的文件,帮你加深对 Ext3 的理解。
我假定你已经学会了怎么建立一个虚拟硬盘并将其格式化为 Ext3 文件系统。如果记不清了,请回到上节课复习一下。课程的配套代码,你需要从这里下载。

打开虚拟硬盘

想要从虚拟硬盘读取文件,首先要做的当然是打开虚拟硬盘。但我们的硬盘是个文件,所以这就变成了打开了一个文件,然后对文件进行读写就行。这些操作我们已经非常熟悉了,不过多展开。
这次我们不用 read 命令来读取虚拟硬盘文件数据,因为那样做还需要处理分配临时内容和文件定位的问题,操作比较繁琐。这里我们直接用 mmap 将整个文件映射到虚拟文件中,这样就能像访问内存一样很方便地访问文件了。
下面我们首先实现 mmap 映射读取文件这个功能,代码如下所示:
int init_in_hdfile()
{
struct stat filestat;
size_t len = 0;
void* buf = NULL;
int fd = -1;
// 打开虚拟硬盘文件
fd = open("./hd.img", O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO);
if(fd < 0)
{
printf("打开文件失败\n");
return -1;
}
// 获取文件信息,比如文件大小
fstat(fd, &filestat);
// 获取文件大小
len = filestat.st_size;
// 映射整个文件到进程的虚拟内存中
buf = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if(buf == NULL)
{
printf("映射文件失败\n");
return -2;
}
// 保存地址 长度大小 文件句柄 到全局变量
hdaddr = buf;
hdsize = len;
hdfilefd = fd;
return 0;
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了在Linux系统中存放文件的过程,重点围绕Ext3文件系统展开讲解。通过详细的代码示例和解释,帮助读者深入了解了Ext3文件系统的存储结构和文件存放方式。文章首先介绍了如何打开虚拟硬盘并将其映射到虚拟内存中,然后讲解了如何获取Ext3文件系统的超级块和块组描述符表的方法。接着详细说明了如何获取Ext3文件系统的根目录,并展示了根目录下的子目录和文件。最后,文章提到了在ext3fs目录下建立了一个ext3.txt文件,并在其中写入了数据,以及如何读取该文件的数据。通过这些实践,读者可以更深入地了解Ext3文件系统的结构和操作方式。整篇文章内容丰富,对于想要深入了解Linux系统文件存储的读者来说,是一篇非常有价值的技术文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《计算机基础实战课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • LockedX
    可以通过innode节点来恢复数据,innode节点在发生变化的时候会记录在日志文件中,如果存储改文件的快还没有被覆盖,就可以通过日志文件来恢复innode节点这样文件就恢复了。老师放心,我比较老实不会去做坏事的,嘿嘿……

    作者回复: 66666

    2022-10-26归属地:湖北
    2
  • TableBear
    有几个疑问想请教一下老师: 1. 根目录的目录项存放在inode节点列表的第二个inode这是规范吗?第一个inode存放什么呢? 2. 如果目录项个数超过一个inode能表示的范围是不是像数据节点inode那样使用一级间接存储块、二级间接存储卡以及三级呢?

    作者回复: 文件系统规定的

    2022-10-24归属地:湖北
    1
  • 苏流郁宓
    inode相对于块组的啊

    作者回复: 嗯嗯

    2022-10-24归属地:湖北
    1
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部