Unix系统编程()文件空洞
2024-09-29 05:27:08
如果程序的文件偏移量已然跨越了文件结尾,然后再执行IO操作,将会发生什么情况?
read调用将会返回0,表示文件结尾。令人惊讶的是,write函数可以在文件结尾后的任意位置写入数据。
从文件结尾后到新写入数据的这段空间被称为文件空洞。
从编程的角度来看,文件空洞是存在字节的,读取空洞将返回以0(空字节)填充的缓冲区。
然而,文件空洞不占用任何磁盘空间。知道后续某个时间点,在文件空洞中写入了数据,文件系统才会为之分配磁盘块。
文件空洞的优势在于,与为实际需要的空字节分配磁盘块相比,稀疏的填充文件会占用较少的磁盘空间。
核心转储文件(core dump)是包含文件空洞常见的例子。
对于文件空洞不占用磁盘空间的说法要稍微限定一下。在大多数的文件系统中,文件空间的分配是以块为单位的。块的大小取决于文件系统,通常是1024字节,2048字节,4096字节。如果空洞的边界落在块内,而非恰好落在块边界上,则会分配一个完整的块来存储数据,块中与空洞相关的部分则以空字节填充。
不支持文件空洞的文件系统会显式地将空字节写入文件。
空洞的存在意味着一个文件名义上的大小可能要比其占用的磁盘存储总量要大。
向文件空洞中写入字节,内核需要为其分配存储单元,即使文件大小不变,系统的可用磁盘空间也将减少。
不太理解的是空洞落在块内和落在块的边界上,我倒是理解了,但是不知道对不对。
最新文章
- android中的ActionBar和ToolBar
- 2016-2017 CT S03E05: Codeforces Trainings Season 3 Episode 5 (2016 Stanford Local Programming Contest, Extended) I
- IEEE802.11数据帧在Linux上的抓取
- Linux Mono OpenShift Cloud9 rhc
- struts2日常
- outlook 2003配置连接exchange server 2010报错——无法完成此操作。 与 Microsoft Exchange Server 的连接不可用。 Outlook 必须联机或连接才可完成该操作
- Java垃圾回收学习笔记
- Scrapy的debug方式
- mongodb 3.4 分片 一主 一副 一仲 鉴权集群部署.
- ansible学习基础知识和模块(一)
- MySQL之索引原理和慢查询优化
- Foxmail中配置O365邮箱和Hotmail邮箱
- java多线程系列13 设计模式 Future 模式
- ADOTable的CancelUpdate和CancelBatch的区别?(100分)
- 微信小程序 页面跳转navigator与传递参数
- oracle11g exp导出问题:部分表导不出来
- FlatBuffers初探
- DSP已经英雄迟暮了吗?FPGA才是未来的大杀器?
- 【C#/WPF】图像数据格式转换时,透明度丢失的问题
- 【Git】一、Git简介