Linux之文件--缓冲区和c封装
缓冲区在哪里read操作系统把内核缓冲区的数据拷贝到你传入的用户内存buf 如果内核缓冲区没有需要的数据 → OS 发起硬件请求从磁盘加载数据进入内核缓冲区再拷贝给应用。write把应用buf的数据拷贝进内核缓冲区函数返回后续内核再异步写到磁盘。操作表 一组函数指针数组跳转表存储这个文件 / 硬件对应的read、write、open、close、llseek等底层实现地址。//内核伪代码 struct file_operations { //读写偏移 loff_t (*llseek) (struct file *, loff_t, int); //对应系统调用 read() ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); //对应系统调用 write() ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); //打开文件 int (*open) (struct inode *, struct file *); //关闭文件 int (*release) (struct inode *, struct file *); //还有 ioctl、poll、mmap…… };用户层永远只调用统一 APIread(fd)/write(fd)不需要区分底层是磁盘文件、键盘、显示器、网卡、串口。 内核收到系统调用后根据 fd 找到struct file取出里面的f_op操作表调用操作表里对应的函数指针缓冲区在内核空间内核缓冲区图中间区域内核缓冲区、磁盘、read()/write()系统调用、struct file归属内核空间操作系统维护所有进程共享内核缓存资源接口系统调用read(int fd, buf, size) / write()数据流向write 流程应用 → 用户缓冲区 → write 系统调用 → 内核缓冲区 →延迟刷新磁盘read 流程磁盘 → 内核缓冲区 → read 系统调用拷贝 → 用户缓冲区 → 应用程序变量重点调用write()绝不直接写磁盘write 只是把数据拷贝到内核缓冲区操作系统会在合适时机内核线程 pdflush把缓冲区数据刷入磁盘这种机制叫延迟写。为什么要有缓冲区系统调用是有成本的,我们要减少系统调用的次数new malloc底层都是会调用系统调用,但是你在申请的时候给你的是虚拟地址空间,当你真正开始用的时候在区物理内存里面给你申请比如在stl里面vector需要扩容的时候,一般采用2倍,这样也有利于减少系统调用的次数为了减少系统调用,c,c就登场了用户级缓冲区归属用户空间由 C 标准库libc维护接口fopen/fgets/fputs/fprintf/fread/fwrite这些标准 IO 函数意义减少系统调用次数系统调用read/write会发生用户态 ↔ 内核态切换开销大。 程序不会调用一次write写 1 个字节而是先把数据攒在用户缓冲区缓冲区满 / 主动刷新时才调用一次write系统调用进入内核。两条数据流路线路线 A标准库 IO带用户缓冲区 fputs/fprintf应用内存变量 →FILE 用户缓冲区→ 缓冲区刷新 →write()系统调用 →内核缓冲区→ 操作系统异步刷入磁盘路线 B原生系统调用无用户缓冲区 read/write应用内存 buffer → 直接通过read/write在内核缓冲区、程序内存之间拷贝接下来我们看下面三个现象eg1Linux 规则最小可用文件描述符分配进程启动默认fd0 (标准输入)、fd1 (标准输出 stdout)、fd2 (标准错误 stderr)close(1)释放 fd1随后open()打开文件优先拿到最小空闲 fd也就是 1最终fd 1 指向 log.txtprintf底层往stdoutfd1输出所以内容本该写入 log.txt。说明printf数据放入 stdout 缓冲区尚未 writeclose(fd)→关闭文件描述符 fd1缓冲区数据还躺在内存里但是通往文件的 fd 已经被关掉等到程序退出库函数尝试刷新缓冲区、调用 write (fd1) → fd1 已经关闭系统调用失败缓冲区数据直接丢失文件没有写入任何内容log.txt为空文件当我们为他添加fflush,时又重新把hello world写入log.txt文件eg2运行效果等待 1 秒后输出hello运行效果等待 1 秒无任何输出printf(hello)不带换行符\n程序输出到终端stdout 是行缓冲模式。 行缓冲规则只有遇到\n、主动fflush、进程正常库层退出才刷新缓冲区单纯字符串无换行数据停留在C 库用户缓冲区不会调用 write 系统调用。exit会刷新语言级缓冲,二_exit则不会,导致缓冲区内容丢失eg3标准 IO 库函数C 库带用户缓冲区printf / fprintf(stdout) / fputs数据先存入进程用户态 stdio 缓冲区不一定立刻调用write系统调用。系统调用无用户缓冲区write(fd,buf,len)直接发起内核调用数据直达内核缓冲区不存在用户缓冲区滞留。前置缓冲规则输出到终端交互式 shellstdout 行缓冲遇见\n自动刷新缓冲区输出到普通文件重定向 aaaastdout 全缓冲\n不会触发刷新数据停留在用户缓冲区解释现象1../buffer.exe直接终端运行行缓冲 每条标准 IO 带\n触发缓冲区刷新依次打印 4 行无重复。2../buffer.exe aaaa重定向到文件全缓冲\n不再刷新程序退出时exit()统一刷新缓冲区。 顺序write 直接输出随后程序退出一次性输出缓冲区内 3 条标准 IO 内容。解释现象forkfork()创建子进程时采用写时复制COW父进程整个用户地址空间完整复制一份给子进程。stdio 缓冲区位于用户地址空间会被一并拷贝分支 1终端运行行缓冲 标准 IO 函数内部\n触发刷新fork 执行前缓冲区已经清空。 fork 时父子进程缓冲区都是空的后续没有重复输出。分支 2重定向文件全缓冲\n不会刷新缓冲区执行fork()那一刻 父进程的 stdout 缓冲区还存放着hello printf\nhello printf\nhello fprintf\nhello fputs\nfork 复制地址空间 →子进程拿到一份一模一样的缓冲区副本。父子进程是独立进程父进程退出刷新自身缓冲区输出一组标准 IO 内容子进程退出刷新自己复制得来的缓冲区再次输出同一组内容而write()是系统调用没有用户缓冲区在 fork 之前就已经完成内核输出只会打印一次。内核缓冲区两种刷新方式主动强制落盘fsync () /fdatasync ()系统调用强制把内核缓冲区数据立即写入磁盘硬件等待磁盘 IO 完成才返回。fsync(fd)刷新文件数据 文件元信息大小、修改时间等fdatasync(fd)只刷新文件内容不强制同步元信息性能略高操作系统异步自动刷新内核后台守护进程pdflush/flusher定时扫描在系统空闲、内存不足时自动把 Page Cache 数据刷到磁盘无需程序干预。

相关新闻

CI/CD流水线集成Trivy与Grype:构建容器镜像安全门禁实战指南

CI/CD流水线集成Trivy与Grype:构建容器镜像安全门禁实战指南

1. 项目概述:为什么CI流水线必须嵌入镜像安全扫描?最近在梳理团队的CI/CD流水线,发现一个挺普遍但容易被忽视的问题:我们花了大量精力做代码扫描、单元测试,但最终打包出来的容器镜像,其内部依赖的安全性却…

2026/7/28 23:27:36阅读更多 →
密码学与逆向工程入门,攻克 CTF 难点题型

密码学与逆向工程入门,攻克 CTF 难点题型

破局 CTF:从密码学迷雾到逆向工程深处在 CTF(Capture The Flag)的赛场上,Web 和 Misc 方向往往因为上手快、反馈直接而成为新手的“舒适区”。然而,真正决定比赛上限的,往往是那些让人望而生畏的 Crypto&am…

2026/7/28 23:27:36阅读更多 →
Kali Linux 工具链详解,渗透测试必备神器清单

Kali Linux 工具链详解,渗透测试必备神器清单

为什么 Kali Linux 是渗透测试的“瑞士军刀”在网络安全的学习路径中,工具的选择往往决定了实战的效率。对于初学者而言,面对琳琅满目的安全软件,最容易陷入“收藏党”的误区——下载了一堆工具却不知从何下手。Kali Linux 之所以成为行业标准…

2026/7/28 23:27:36阅读更多 →
CAR-T疗法的免疫原性风险能否被有效识别与管控?

CAR-T疗法的免疫原性风险能否被有效识别与管控?

CAR-T疗法的免疫原性风险能否被有效识别与管控?简述:嵌合抗原受体T细胞疗法在血液肿瘤中成效显著,但其免疫原性问题——尤其是针对小鼠源单链可变区片段的预存或治疗诱导免疫应答——正日益受到关注。一、CAR-T细胞的免疫原性源自哪些结构成分…

2026/7/29 0:51:56阅读更多 →
文声图:AI翻译私有化部署为什么是政企的硬门槛——信创适配与数据安全方案

文声图:AI翻译私有化部署为什么是政企的硬门槛——信创适配与数据安全方案

一家省级政务大厅需要为外籍访客提供多语种办事引导,翻译需求不大,每天几十条短文本。技术方案选型时,IT部门第一反应是接公有云翻译API——成本低、接入快、无需维护。方案报到信息中心后被驳回。理由很简单:办事大厅的业务数据涉…

2026/7/29 0:51:56阅读更多 →
GPT-5.6自主入侵HuggingFace事件:AI沙箱逃逸的完整技术复盘与安全启示

GPT-5.6自主入侵HuggingFace事件:AI沙箱逃逸的完整技术复盘与安全启示

2026年7月16日,Hugging Face发布了一则安全事件通告,内容让整个AI行业的从业者都倒吸一口凉气:生产基础设施遭到入侵,入侵者不是人类黑客,而是一个自主运行的AI智能体。这个AI智能体在无人干预的情况下,突破…

2026/7/29 0:51:56阅读更多 →
生命涌现的小龙虾技能之【Pet Detection Skill | 宠物检测技能】简介

生命涌现的小龙虾技能之【Pet Detection Skill | 宠物检测技能】简介

🐾 Pet Detection Skill | 宠物检测技能 智能分析中枢 图片/视频智能分析 结构化报告 历史报告云端查询 🧭 技能概览 | Overview 模块内容🏷️ 技能名称宠物检测技能🎯 核心目标宠物检测技能,检测出目标区域内出现…

2026/7/29 0:49:56阅读更多 →
【大白话说Java面试题 第201题】【09_Zookeeper篇】第2题:说一下什么是 Http 协议?

【大白话说Java面试题 第201题】【09_Zookeeper篇】第2题:说一下什么是 Http 协议?

📌 PDF:大白话说Java面试题 — 09_Zookeeper篇 第2题:说一下什么是 Http 协议? 📚 回答: 核心考点: HTTP 协议是互联网通信的基石,大厂面试中不会只问"应用层协议、请求响应模…

2026/7/29 0:49:56阅读更多 →
SHPS1: 免疫调节与细胞信号传导的关键分子

SHPS1: 免疫调节与细胞信号传导的关键分子

SHPS1SHPS1(Src homology region 2 domain-containing phosphatase substrate 1)是一种在细胞信号传导中起关键作用的分子,广泛存在于多种细胞类型中,尤其在免疫细胞中具有重要功能。其作为一种重要的细胞膜受体,相较于…

2026/7/29 0:49:56阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →