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

6.2 文件的缓存位置

1. 文件的缓冲

1.1 缓冲说明
将文件内容写入到硬件设备时, 则需要进行系统调用, 
这类I/O操作的耗时很长, 为了减少I/O操作的次数, 文件通常使用缓冲区.
当需要写入的字节数不足一个块时, 将数据放入缓冲区, 当数据凑够一个块的大小后才进行系统调用(即I/O操作).
系统调用: 向操作系统申请一个服务, 操作系统响应后, 帮助调用硬件的驱动程序, 这种操作称为I/O操作.
1.2 文件的缓冲行为:
全缓冲: 只有当数据凑够一个块时, 才进行系统调用(即I/O操作).行缓冲: 碰到一个'换行符', 就进行一次系统调(多用于tty设备, 也就是终端设备, 如shell).无缓冲: 不进行缓冲, 需要及时的将数据发送到接口(比如串口设备).
1.3 补充知识
机械硬盘的盘面可以分为很多磁道, 可以将磁道划分为个扇区.扇区: 是磁盘的最小组成单元, 是磁盘的读写基本单位, 传统一个扇区为512字节.
硬盘公司大概在2010年左右, 开始从传统的512字节扇区大小磁盘迁移到更高效的4096字节(目前还是很少).由于扇区的数量比较小且数目众多, 在寻址时比较困难, 
所以操作系统就将相邻的扇区组合在一起, 形成一个块, 再对块进行整体的操作.: 是操作系统与磁盘之间交流的最小单位, 它是一个虚拟的概念. 
操作系统忽略对底层物理存储结构的设计, 虚拟出来磁盘块的概念, 在系统中认为块是最小的单位.
它的所以大小可以通过操作系统设置, 一个块通常是4K(4096字节).
对应扇区为512字节的硬盘来说, 1个块是由连续的8个扇区组成.
对应扇区为4096字节的硬盘来说, 1个块是由1个扇区组成.固态硬盘与内存使用是闪存芯片, 没有扇区一说而是称为页, 
固态硬盘一个页是8KB甚至16KB的, 内存一个页是64k.

2. buffering 参数

Python的文件对象的默认的缓冲行为全缓冲, 当凑够一个块的数据才进行系统调用.
缓冲区的大小是根据平台和块设备自身的属性相关, 可以通过open函数buffering参数设置缓冲大小.
buffering参数设置缓冲模式以及缓冲区大小.
buffering = n, n > 1, 设定缓冲模式为全缓冲, 缓冲区大小为n个字节.
buffering = 1, 设定缓冲模式为行缓冲, 遇到换行符'\n'时进行系统调用, 不支持二进制格式.
buffering = 0, 此为无缓冲你模式, 只要有数据, 就直接进行系统调用.

3. 交互模式演示

* 以脚本方式运行, 在文件句柄关闭时会将缓存区的数据刷入硬盘中, 不好看测试效果.
import io# 查看默认缓冲区大小
print(io.DEFAULT_BUFFER_SIZE)  # 8192
# 创建文件对象, b模式方便计算写入的字节.
f = open('a.txt', 'wb')# 写入1000个字节的数据.
f.write(b'1' * 1000)  # 这个时候在打开a.txt文件, 是空白的.
input('回车继续写!')# 在写入7190个字节的数据, 现在共有8190个字节.
f.write(b'1' * 7190)  # 这个时候在打开a.txt文件, 是空白的.
input('回车继续写!')# 在写入2个字节的数据, 现在共有8192个字节, 这个时候缓存区满了可它没有立刻写进去...
f.write(b'1' * 2)
input('回车继续写!')# 在写一个字节, 缓存的数据写入到硬盘中. 查看文件字符个数为8192个字节.
f.write(b'1' * 1)
input('回车结束程序!')  # 这个时候文件字符个数为8193个字节.
# 设置全缓冲区的大小为2048.
f2 = open('b.txt', 'wb', buffering=2048)
f2.write(b'+' * 1024)
input('回车继续写!')
f2.write(b'+' * 1024)
input('回车继续写!')
# 在写一个字符, 缓存的数据写入到硬盘中.
f2.write(b'-' * 1)
input('结束程序!')
# 设置行缓冲, buffering为1.
f3 = open('c.txt', 'w', encoding='utf8', buffering=1)
input('回车继续写!')
f3.write('abc')
input('回车继续写!')
f3.write('123')
input('回车继续写!')
# 这个时候, 缓存的数据写入到硬盘中.
f3.write('\n')
input('结束程序!')
# 无缓冲, buffering为0.
f4 = open('d.txt', 'wb', buffering=0)
f4.write(b'a')
input('回车继续写!')
f4.write(b'b')
input('结束成功!')

相关文章:

6.2 文件的缓存位置

1. 文件的缓冲 1.1 缓冲说明 将文件内容写入到硬件设备时, 则需要进行系统调用, 这类I/O操作的耗时很长, 为了减少I/O操作的次数, 文件通常使用缓冲区. 当需要写入的字节数不足一个块时, 将数据放入缓冲区, 当数据凑够一个块的大小后才进行系统调用(即I/O操作).系统调用: 向…...

在Elasticsearch中,过滤器(Filter)是用于数据筛选的一种机制

在Elasticsearch中,过滤器(Filter)是用于数据筛选的一种机制,它通常用于结构化数据的精确匹配,如数字范围、日期范围、布尔值、前缀匹配等。过滤器不计算相关性评分,因此比查询(Query&#xff0…...

MySQL----主键、唯一、普通索引的创建与删除

创建索引 CREATE INDEX index_name ON table_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);CREATE INDEX: 用于创建普通索引的关键字。index_name: 指定要创建的索引的名称。索引名称在表中必须是唯一的。table_name: 指定要在哪个表上创建索引。(column1, column2, ……...

css预处理是什么?作用是什么?

CSS预处理器是一种增强和扩展标准CSS的工具。它们允许开发者使用变量、嵌套规则、Mixin(混合)以及函数等高级功能,以更模块化和可维护的方式编写CSS代码。预处理器如Sass(SCSS)、Less和Stylus等,通过引入这…...

镜像拉取失败:[ERROR] Failed to pull docker image

问题描述 执行 bash docker/scripts/dev_start.sh 命令提示错误: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post “http://%2Fvar%2Frun%2Fdocker.sock/v1.45/images/create?fromImageregistry.b…...

FM全网自动采集聚合影视搜索源码

源码介绍 FM 全网聚合影视搜索(响应式布局),基于 TP5.1 开发的聚合影视搜索程序,本程序无数据库,本程序内置P2P 版播放器,承诺无广告无捆绑。片源内部滚动广告与本站无关,谨防上当受骗,资源搜索全部来自于网络。 环境…...

【DevOps】什么是 pfSense?免费构建SDWAN

目录 一、详细介绍pfSense 1、 什么是 pfSense? 2、原理 3、 特点 4、 优点 5、 缺点 6、应用场景 7、 典型部署 二、pfSense实战:免费构建企业SD-WAN 1、拓扑图 2、准备工作 3、安装和基本配置pfSense 4、配置VPN 配置IPsec VPN 配置OpenV…...

elementui table超出两行显示...鼠标已入tip显示

elementui el-table超出两行显示…鼠标已入tip显示 方式一 <el-table-column label"描述"prop"note"class-name"myNoteBox"><template slot-scope"scope"><!-- tips悬浮提示 --><el-tooltip placement"to…...

空白服务器安装系统

一、准备工作 确定服务器的硬件配置&#xff0c;包括处理器、内存、硬盘等信息。选择合适的操作系统镜像文件&#xff0c;可以从官方网站或者第三方网站下载。 二、制作启动盘或镜像 如果服务器支持从光盘启动&#xff0c;可以使用光盘制作软件&#xff08;如UltraISO&#…...

【车载音视频电脑】嵌入式AI分析车载DVR,支持8路1080P

产品特点 采用H.265 & H.264编解码&#xff0c;节约存储空间、传输流量&#xff1b; 高分辨率&#xff1a;支持8路1080P*15FPS/4路1080P*30FPS、720P、D1等编解码&#xff1b; 支持1张SATA硬盘&#xff0c;取用方便&#xff0c;满足大容量存储要求&#xff1b; 支持1个…...

Java实现Mysql批量插入与更新

第一、批量插入语句 Insert({"<script>","INSERT INTO TABLE_NAME (" "ID," "IS_DELETE," "GMT_CREATE," "GMT_MODIFIED" ")VALUES","<foreach collection list item item separator …...

李沐团队发布Higgs-Llama-3-70B,角色扮演专用模型

前言 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;在各个领域都展现出强大的能力&#xff0c;尤其是其在对话、写作、代码生成等方面的应用越来越广泛。然而&#xff0c;想要让 LLM 真正地融入人类社会&#xff0c;扮演各种角色&#xff0c;还需要具备更强大的角…...

2024年护网行动全国各地面试题汇总(4)作者:————LJS

面试过程及回答 自我介绍这里就如实回答的工作经历&#xff0c;参与的项目&#xff0c;尽量简短的把你参与的项目和成果说出来就行 使用过哪些设备&#xff0c;出现误报怎么办 天眼、EDR、全流量告警、态势感知、APT、蜜罐设备先去查看设备的完整流量日志等信息确认是否为误报&…...

秋招突击——6/11——复习{(树形DP)树的最长路径、电话号码的字母组合}——新作{重复序列中前最小的数字}

文章目录 引言复习树形DP——树的最长路径电话号码的字母组合 新作重复序列中前最小的数字个人实现参考实现 总结 引言 这两天可能有点波动&#xff0c;但是算法题还是尽量保证复习和新作一块弄&#xff0c;数量上可能有所差别。 复习 树形DP——树的最长路径 这道题是没有…...

Lua与C交互API接口总结

Lua与C交互 1. 常见Lua相关的C API压入元素查询元素获取元素检查元素栈的相关数据操作 2. C调用Lua核心调用函数示例 3. Lua调用C1. C函数注册到Lua&#xff08;lua_register&#xff09;示例2. 批量注册&#xff08;luaL_Reg&#xff09;示例 1. 常见Lua相关的C API 压入元素…...

DT浏览器很好用

简单的浏览器&#xff0c;又是强大的浏览器&#xff0c;界面简洁大方&#xff0c;操作起来非常流畅&#x1f60e;&#xff0c;几乎不会有卡顿的情况。 搜索功能也十分强大&#x1f44d;&#xff0c;能够快速精准地找到想要的信息。 而且还有出色的兼容性&#xff0c;各种网页都…...

RabbitMQ实践——在管理后台测试消息收发功能

在《RabbitMQ实践——在Ubuntu上安装并启用管理后台》中&#xff0c;我们搭建完RabbitMQ服务以及管理后台。本文我们将管理后台&#xff0c;进行一次简单的消息收发实验。 赋予admin账户权限 登录到管理后台&#xff0c;进入到用户admin的管理页面 点击“set permission”&a…...

vscode卡顿问题处理(vue-official插件)

vue官方扩展由volar升级为vue-official&#xff0c;部分人的ide会变得非常卡顿&#xff0c;这是由于vscode本身一些问题导致&#xff0c;如下图作者解释&#xff1a; 解决方式&#xff1a; 通过禁用Hybrid模式&#xff0c;不使用tsserver来接管语言支持&#xff0c;卡顿会缓解…...

使用Kube-Bench对Kubernetes进行安全检测

使用Kube-Bench对Kubernetes进行安全检测 1. 工具介绍 Kube-Bench是一个开源的Go语言工具&#xff0c;用于自动化检查Kubernetes集群是否符合CIS Kubernetes基准。这些基准包括一系列关于Kubernetes配置和部署安全性的建议和最佳实践。 Kube-Bench执行了一系列针对Kubernete…...

STM32开发过程中碰到的问题总结 - 1

文章目录 前言1. 怎么生成keil下可以使用的文件和gcc下编译使用的makefile2. STM32的时钟树3.怎么查看keil5下的编译工具链用的是哪个4. Arm编译工具链和GCC编译工具链有什么区别吗&#xff1f;5. 怎么查看Linux虚拟机是x86的还是aarch646. 怎么下载gcc-arm的编译工具链7.怎么修…...

hiberfil.sys文件在Windows系统作用

hiberfil.sys文件在Windows系统中起着关键的作用&#xff0c;主要涉及到计算机的休眠功能。以下是关于hiberfil.sys的详细解释&#xff1a; 定义与功能&#xff1a; hiberfil.sys是Windows休眠功能&#xff08;Windows Hibernation&#xff09;将内存数据与会话保存至硬盘所需…...

智能制造前沿:ARMxy工控机在机器人控制中

机器人控制系统正逐步成为现代制造业的核心引擎。在这个过程中&#xff0c;ARMxy工业计算机以其独特的优势&#xff0c;成为了驱动这一变革的关键力量。本文将以自动化装配线机器人为例&#xff0c;探讨ARMxy如何通过其低功耗、高性能特性&#xff0c;以及高度灵活性的设计&…...

【CS.AI】AI引领编程新时代:深度探索GitHub Copilot

文章目录 引言0. TOP TAKEAWAYS 重要要点1. Copilot的基本功能2. 技术原理3. 优势与局限优势局限 4. 使用体验4.1 初次使用4.2 在 JetBrains 全家桶中使用 GitHub Copilot1. 安装插件2. 配置插件3. 使用 GitHub Copilot 4.3 日常开发4.4 体验与反馈 5. 对开发者生态系统的影响5…...

Java:爬虫htmlunit抓取a标签

如果对htmlunit还不了解的话可以参考Java&#xff1a;爬虫htmlunit-CSDN博客 了解了htmlunit之后&#xff0c;我们再来学习如何在页面中抓取我们想要的数据&#xff0c;我们在学习初期可以找一些结构比较清晰的网站来做测试爬取&#xff0c;首先我们随意找个网站如下&#xff…...

电池包断路单元DBU的预充电电阻应用案例

当电池组接触器闭合到电机和逆变器上时&#xff0c;逆变器电容器中会有电流涌入。这种非常高的电流至少可能会使接触器老化&#xff0c;并可能永久损坏接触器。 因此&#xff0c;当我们关闭电池组上的接触器时&#xff0c;我们分三个步骤执行此操作&#xff1a; 1.关闭主负极…...

车载网络安全指南 系统层面开发阶段(六)

返回总目录->返回总目录<- 目录 前言 一、统层面产品开发启动 二、系统层面漏洞分析 三、网络安全策略具体化 四、确定网络安全技术需求 五、系统设计 六、系统集成与测试 七、网络安全验证 八、系统层面网络安全评估 九、系统层面产品开发阶段检查 十、产品发…...

Julia 文件读写

Julia 文件读写 Julia 是一种高性能的动态编程语言,特别适合于数值计算和科学计算。在数据处理和科学研究中,文件读写是一项基本且重要的技能。Julia 提供了一套丰富的函数和库来处理文件读写操作,使得文件操作变得简单而高效。 基本文件操作 打开和关闭文件 在 Julia 中…...

为何总是会失败

总是失败可能涉及多种因素&#xff0c;但这里有一些常见原因和对应的建议&#xff0c;或许可以帮助你找到问题所在并加以改进。 1. 目标不明确 原因 目标不清晰或设定过高会导致失望和挫折感。如果目标不明确&#xff0c;行动就会缺乏方向&#xff0c;导致效率低下和失败。 …...

【PB案例学习笔记】-21小大写金额转换

写在前面 这是PB案例学习笔记系列文章的第21篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…...

12.实战私有数据微调ChatGLM3

实战私有数据微调ChatGLM3 实战私有数据微调ChatGLM3实战构造私有的微调数据集基于 ChatGPT 设计生成训练数据的 Prompt使用 LangChain GPT-3.5-Turbo 生成训练数据样例训练数据解析、数据增强和持久化存储自动化批量生成训练数据集流水线提示工程&#xff08;Prompt Engineer…...

平度网站建设公司/搜索引擎推广seo

Python的数据类型 分为整数&#xff0c;浮点数&#xff0c;字符串&#xff0c;布尔值&#xff0c;空值 一、整数 Python可以处理任意大小的整数&#xff0c;当然包括负整数&#xff0c;在Python程序中&#xff0c;整数的表示方法和数学上的写法一模一样&#xff0c;例如&…...

网站制作策划建设大纲/搜索引擎入口google

文章目录一、概念1.1、事务1.2、手动提交&#xff1a;autocommit01.3、自动提交&#xff1a;autocommit1二、设置 autocommit 的开启和关闭&#xff1a;2.1、查看当前自动提交状态&#xff1a;2.2、临时设置方法&#xff1a;2.3、永久设置方法&#xff1a;三、spring 底层对自动…...

网站空间怎么收费/今日头条热搜榜

nautilus 图形化桌面包括了一个叫做 Nautilus 的文件管理器 在GNOME中是Nautilus(鹦鹉螺)&#xff0c;而KDE中是Konqueror...

做古风人物小图的网站或软件/网站建设技术外包

1(必选)、解压从adobe官方网站 http://get.adobe.com/cn/flashplayer/ 下载下来的flash player的*.tar.gz文件 2(必选)、将libflashplayer.so文件拷贝到/usr/lib/mozilla/plugins目录下命令&#xff1a;sudo cp libflashplayer.so /usr/lib/mozilla/plugins/libflashplayer.so…...

点对点视频网站开发/新闻网最新消息

名字和id在之前的例子中我们看到了一些方法可以获得线程的名字的方法&#xff0c;构造方法中也出现了给线程命名的方法。我们举个例子。public class Main {public static void main(String[] args){Thread thread1new Thread(new TheThread(),"thread1");Thread thr…...

怎么做同城商务网站/哈尔滨电话本黄页

目录前言环境问题描述&#xff1a;尝试办法1.配置启动参数&#xff08;未解决&#xff09;2.[修改IDEA配置](https://zhuanlan.zhihu.com/p/103850463)&#xff0c;idea64.exe.vmoptions&#xff08;未解决&#xff09;3.[修改Tomcat配置](https://www.cnblogs.com/lixin-link/…...