文件IO学习笔记一

文章探讨了C库函数如何通过文件IO系统函数与硬件交互,强调了C库函数中的IO缓冲区在提高效率中的作用。同时,介绍了不同架构下虚拟地址空间的组织,包括32位和64位系统的差异,以及用户区内的栈、堆、BSS和数据段。文件描述符作为Linux系统中跟踪文件的关键概念,每个进程有一个文件描述符表,用于管理文件的访问。
摘要由CSDN通过智能技术生成

架构

用户代码——》C库函数(man 3 name)——》Linux文件IO系统函数(man 2 name)——》磁盘等硬件
在这里插入图片描述

C库函数

效率高,其包含IO缓冲区,缓冲区默认8192Bytes,也就是8K字节,当缓冲区满了后再操作磁盘等硬件,这样就减少了对硬件的操作,所以其效率高。

当使用fopen打开文件时,会返回一个类型为FILE的结构体指针,该结构体包含:
》文件描述符(整型值)
》文件读、写指针
》IO缓冲区
》……
在这里插入图片描述

虚拟地址空间(虚拟内存)

对于32位的机器,其虚拟地址空间大小为:2^32=4,294,967,296Bytes=4GB
对于64位的机器,其虚拟地址空间大小并不是2^ 64,而是2^48=256TB
其虚拟地址空间被分为内核区用户区两个部分。
其中在用户区中:
栈空间:从高地址向低地址存,由系统自动分配/释放,速度较快,调用函数时存储函数的返回地址、参数、局部变量、返回值。
堆空间:从低地址向高地址存,用户手动分配/释放,速度慢,容易产生内存碎片。
bss段:存放未初始化和初始化为0的全局变量和静态变量(全局+局部)
数据段:存放已经初始化的 全局变量和静态变量
代码段:包括只读存储区和文本区,其中只读存储区存储字符串常量,文本去存程序的机器码
在这里插入图片描述

文件描述符

Linux下叫做文件描述符,在Win下叫做文件句柄。

内核-》内存管理-》PCB进程控制块-》文件描述符表。

内核就是一段程序,PCB就是一结构体;
文件描述符表是一个数组,每个进程会产生一个文件描述符表,其默认大小为1024个(0-1023)。
文件描述符表的前三个文件描述符默认是被占用的,分别为:标准输入、标准输出、标准错误,默认是打开状态,其实其对应的就是当前终端(/dev/tty)(Linux下一切皆文件)。
一个文件可以被多个文件描述符打开,打开新文件时候选择最小的空闲文件描述符(由内核控制)。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猛笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值