[LINUX]文件的读取过程

文件打开和读取的过程:在调用open之后,在内核全局区域生成一条文件表的项,并填写了相关的运行时参数,然后,在进程的u区中在文件描述符表中也新生成了一个项,他的索引作为fd的值,返回给用户态,一般来看所有的系统调用如果失败的话,返回的值恒为-1,。所以open实际上是初始化两张表中的两条记录(当然这中间还包括一个iname的逻辑,即通过文件的文件名对应到inode索引节点的记录,找到这个inode的地址之后,才能够建立上层的两张表的数据),read调的过程就会比较简单,其实就是将想要读多少字节放到用户态在那个内存中告诉内核,内核会根据用户的“需求”,调用从磁盘-内核缓冲区-用户态内存的顺序将数据放到用户态内存中。而这里从磁盘-内核缓冲区,这个内核本来自己有很多地方就需要做,内核有很多东西自己都放在磁盘上存储的,经常需要进行磁盘和内存之间的数据交换,比如inode的结构的数据,比如空闲磁盘索引节点的数据,所以这个算法内核本来就是自带的,读取的操作仅仅就是多了一个步骤,将数据从内核缓冲区拷贝到用户态而已(当然,由于用户数据作为内核的调用的输入,所以还会有数据检查,以及一些较为完备的重试和报错机制,能够cover一些用户态常见的异常场景等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值