栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

理解文件IO

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

理解文件IO

第一部分:dos系统下对磁盘的读写

此部分参考《汇编语言》王爽 清华大学出版社

以3.5英寸软盘为例:2面 * 80磁道 * 18扇区 * 512字节。对磁盘的访问由磁盘控制器进行,只能以扇区为单位对磁盘进行读写。BIOS提供了对磁盘读写的中断例程,为我们封装了对硬件的复杂操作,我们可以用它对磁盘进行读写。当然如果你熟悉底层硬件,精通如何控制磁盘控制器,你也可以自己写一个程序完成读写操作。

中断例程为13h。以下是程序所需的参数:ah 存放13h的功能号(2是读扇区);al 读取的扇区数; ch 磁道号;cl 扇区号;dh 面号;dl 驱动器号;es:bx 指向接收数据的内存区。设置好参数,调用程序就OK了。

反过来,写数据也是差不多的,写扇区的功能号是3。

第二部分:c语言的文件IO

打开文件代码:FILE * fp = fopen(v1, v2); v1是文件名,v2代表打开方式。解释一下:fopen是c标准库函数。当我们用fopen函数打开文件时,会在内存中创建两个区域。一个是文件信息区,其实是一个FILE结构体,存放文件相关信息,包括文件数据缓冲区位置。一个是文件数据缓冲区,用来存放要输入输出的文件数据。这两个区域应该都在操作系统内核中。然后把文件信息区的地址赋给了声明的指针,这样这个指针就能代表这个文件了。一般对文件的读写函数,其参数都是这样的一个指针。

关闭文件:fclose(fp); 撤销文件信息区和文件数据缓冲区。当然,我们都知道底层压根就没有撤销这种概念,其实就是指针不再指向文件信息区,那两块区域也就没人要了。

c语言的文件IO内容非常多,这里我们只是简明扼要的理解其过程。

第三部分:java文件IO

一般来说,整个文件的读写过程如下:读文件,先把数据从硬盘复制到操作系统内核,再从内核复制到程序内存;写文件则是反过来。但是一般来说,我们写程序还是会再建一块缓冲区,作为程序数据和操作系统内核之间的缓冲。流可以理解为文件信息区和数据缓冲区。

java中负责IO的基类是两个抽象类InputStream和OutputStream,它们有read和write的相关方法。基本流按字节读写,没有缓冲区,不方便使用。

new FileOutputStream(v1) 会打开文件,即在内核建立文件信息区和数据缓冲区。该类有文件描述符字段,保存的是操作文件的句柄,作用类似c语言中指向文件信息区的指针。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/940999.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号