当前位置: 首页 > news >正文

七、Linux系统下的文件IO (一)

标准 C 库 IO 函数标准 C 库 IO 和 Linux 系统 IO 的关系虚拟地址空间1. 概念本质虚拟地址空间是程序员想象出来的概念实际并不存在物理实体作⽤解决程序加载到内存时的空间分配问题如4G内存⽆法同时加载1G2G2G程序的情况解释编程模型中的关键概念如栈、堆等数据结构的内存分布⽣命周期程序执⾏时由系统创建对应进程和虚拟地址空间程序结束后虚拟地址空间即消失⼤⼩决定因素32位系统2322^{32}232字节 4GB64位系统通常为2482^{48}248字节⾮2642^{64}2642. 用户区详解地址范围0-3GB32位系统可操作性普通⽤户可直接读写核⼼区域受保护区域0-4KB存放NULL指针等特殊值text段存储⼆进制机器指令程序代码data段已初始化的全局变量bss段未初始化的全局变量包括显式赋0的情况int a0;堆空间通过new/malloc分配从低地址向⾼地址增⻓空间通常较⼤栈空间存储局部变量等从⾼地址向低地址增⻓空间通常较⼩共享库动态链接库的加载区域命令⾏参数main函数的argc,argv参数存储区环境变量通过env命令查看的系统环境变量存储区3. 内核区详解地址范围3-4GB32位系统访问限制普通⽤户⽆读写权限⾮法访问会导致段错误访问⽅式必须通过系统调⽤Linux API核⼼功能内存管理包括虚拟内存映射进程管理进程调度与控制设备驱动⽹卡/显卡等硬件驱动VFS虚拟⽂件系统管理映射机制通过 CPU 的 MMU内存管理单元实现虚拟地址到物理地址的转换实际物理内存占⽤远⼩于 4GB 虚拟空间文件描述符1. 程序与进程的区别程序特性源代码和可执⾏⽂件都是程序只占⽤磁盘空间不占⽤内存空间进程特性程序运⾏时的实例操作系统为进程分配资源CPU、内存等占⽤内存空间具有虚拟地址空间映射关系通过 CPU 的 MMU 单元将虚拟地址映射到物理内存2. 可执⾏⽂件的操作⽂件操作流程使⽤fopen打开⽂件使⽤fread/fwrite进⾏读写操作定位机制⽂件指针包含⽂件描述符描述符⽤于定位磁盘上的具体⽂件3. 文件描述符的位置(1文件描述符在内核区内存布局 (32 位的系统举例)0-3G 为⽤户空间3G-4G 为内核区存储位置⽂件描述符保存在进程内核区(2⽂件描述符由内核管理管理机制通过 PCB进程控制块管理PCB 是内核中复杂的结构体包含内存管理、⽂件描述符等模块4. 文件描述符表(1文件描述符表的作⽤数据结构PCB 中的数组结构功能存储多个⽂件描述符⽀持进程同时操作多个⽂件必要性⼀个进程可能同时打开多个⽂件(2文件描述符表的大小默认容量1024 个描述符实际限制决定进程能同时打开的最⼤⽂件数(3⽂件描述符表的前三个默认被占⽤情况标准描述符0STDIN_FILENO标准输⼊1STDOUT_FILENO标准输出2STDERR_FILENO标准错误绑定对象都指向当前终端设备/dev/tty状态默认保持打开状态(4Linux 系统⼀切皆文件Linux特性硬件设备虚拟为⽂件如显示器、⽹卡通过设备⽂件管理硬件终端文件标准 I/O 对应的终端设备⽂件Linux 系统文件的底层存储架构在 Linux 文件系统中一个文件并不是作为一个整体连续存放在磁盘上的而是被拆分为以下三个核心部分Inode索引节点Index Node本质文件的元数据面板。包含内容文件大小、访问权限rwx、所有者UID、所属组GID、时间戳以及指向实际数据块的指针。唯一标识每个 Inode 在所属的文件系统内都有一个唯一的、非负整数编号称为Inode ID。内核访问文件时实际上是通过 Inode 号来识别的而非文件名。Data Block数据块本质磁盘上实际存放文件内容的物理区域如代码、文本、图片等。Directory Entry目录项简称 dentries本质Linux 中“一切皆文件”目录也是一个文件。目录的数据块中存放的是一张映射表记录了该目录下的| 文件名 | Inode 编号 |的对应关系。结论文件名并不存储在文件本身的元数据中而是存储在其父目录的映射表里。
http://www.gsyq.cn/news/1339724.html

相关文章:

  • UE5-MCP:模块化代码流水线与AI驱动的开发提效方案
  • 本源投影内生智能:从概率拟合到硅基生命的底层重构
  • Red Hat Enterprise Linux 10.2 和 9.8 发布,命令行 AI 辅助增强,多工具集性能升级
  • iFakeLocation完全指南:如何在3分钟内实现iOS设备虚拟定位
  • 面试 AI Agent 工程师会被问什么?40+ 真题 + 知识图谱全梳理
  • 照着用就行:盘点2026年顶尖配置的的降AIGC软件
  • BOXER-6646-ADP嵌入式AI平台:机场eGate自动通关系统的工业级智慧大脑
  • RK3568国产工业级车载方案:从核心板设计到量产落地的全流程解析
  • 企业级 AI 应用如何通过 Taotoken 统一管理多模型调用成本
  • 第七篇:《手工测试 vs 自动化测试:何时用,如何选?》
  • vLLM--连续批处理(Continuous Batching)
  • 【2026推荐榜】西安黄金回收哪家价格高?七家实体店横向对比,金晨金包银稳居榜首 - 西安知道
  • Midjourney阿盖洛印相实战手册(从暗房哲学到AI指令映射):12个被官方文档刻意隐藏的--stylize与--chaos协同公式
  • 为什么92%的北欧SaaS项目在ElevenLabs丹麦文语音集成时失败?资深本地化架构师首次披露3层验证漏斗模型
  • ConA磁珠怎么用于糖蛋白富集与CUTRUN?BioMag Plus Concanavalin A磁珠应用与使用指南
  • 刀豆蛋白A磁珠(ConA磁珠)在糖蛋白富集与CUTRUN/CUTTag中的应用解析:BioMag Plus ConA技术指南
  • 10分钟完全指南:开源OmenSuperHub实现惠普游戏本终极性能控制
  • 利用Taotoken用量看板优化提示工程与降低token消耗的策略
  • 从济南话到烟台腔:ElevenLabs山东话语音泛化能力极限测试(覆盖17地市、1362条测试句、WER 8.7%实测数据)
  • ubuntu中Conda环境安装Openclaw
  • TqRiskManagerRule 入门:风控规则挂载与触发排查
  • 深度学习车辆目标检测
  • ElevenLabs海南话语音合成精度骤降真相:训练数据偏差超41.8%,3种绕过方案已验证
  • 为ClaudeCode配置Taotoken密钥实现稳定无感对接
  • 免费解密网易云音乐NCM格式:ncmdumpGUI完整使用指南
  • 影刀RPA跨境店群自动化实战:TikTok Shop多节点高并发调度与Python环境隔离系统
  • 微信网页版访问终极解决方案:wechat-need-web插件完全指南
  • 拷贝构造和运算符重载【C++】
  • OpCore-Simplify:10分钟搞定黑苹果配置,告别3天手动调试的智能神器
  • 告别海外账号!OpenClaw+88api一站式配置:多模型本地管理,小白也能照着做