抽象的操作系统(四) --- 文件
来源:互联网 发布:淘宝商品详情模板设计 编辑:程序博客网 时间:2024/06/05 23:44
对于linux系统来说,什么东西都可以当做一个文件,本人讲的文件,却不是这个。俺所定义的文件,是狭义上的,能够保存在类磁盘设备上的数据集合。
文件管理是操作系统的一个重要模块,采取的磁盘管理方式也是多种多样,比如windows的NTFS,LINUX的ext4等。文件存在的意义,就是能在设备断电之后,还能够有数据被保留下来,以方便重新启动之后的读取或者供使用者分析一些有用的数据。但是对于应用开发人员来讲,可以忽略这些细节,只要关注对于文件系统的操作接口就可以了。这里列举一些基本的操作。
1). 打开。对于文件,要打开之后才能进行读取,实际上是通过文件名到文件句柄的一个转换。文件句柄是操作系统提供的内核对象,它使平台能更好的进行文件的实时管理,比如说可读写,创建,或者多任务的时候,能够解决一些冲突。总之一句话,打开操作让当前程序获得了对文件读写的权限。
2). 关闭。打开文件之后,要记得关闭这个文件,否则删除或者获取文件信息这样的操作将会出现问题。就像malloc必须free一样,Open-Close也是一对操作。Close意味着向操作系统释放一个内核对象,也解除了对这个文件的一个锁定。另外,有些系统Close的时候,才会将数据真正写回磁盘,所以有的童鞋可能会遇到‘明明调了fwrite成功但是文件却没有内容’的问题。
3). 读取。读取是将文件的数据或者一部分数据读取到内存中。这个函数调用的时候,一定要判断返回值,对错误要进行严格的处理,不然会导致文件数据并不是你想的格式,从而出现一些莫名其妙的问题。读取操作对应了读权限,如果打开文件的时候,没有申请读的权限,可能会导致无法读取的错误。
4). 写入。写入时将内存中的数据写入磁盘上的文件。调用这个操作的时候,要查看是否打开文件的时候,申请了写的权限。跟读取一样,要严格判断返回值。在一些设备上,还要判断是否有足够的剩余空间,如果磁盘空间非常少的话,就没有必要写文件了,不然导致了一些问题,得不偿失。
5). 删除。就是将当前文件从文件系统中抹去,这样在文件列表中,就看不到当前的文件了。
6). 重命名。这个操作很多情况下会遇到,比如写一些配置文件的时候,一定要先写临时文件,最后再重命名成真正的文件名。这样做的目的,是防止中途出错。有的时候,老的配置文件,需要等当前的临时文件真正完成了,才能删除。
7). 查找。查找的思路基本所有的系统都是一样的。首先,输入查找的参数进行初始化查找而获取一个句柄,这样根据这个句柄,可以一直NEXT的下去,直到最后一个文件为止。
文件管理是操作系统的一个重要模块,采取的磁盘管理方式也是多种多样,比如windows的NTFS,LINUX的ext4等。文件存在的意义,就是能在设备断电之后,还能够有数据被保留下来,以方便重新启动之后的读取或者供使用者分析一些有用的数据。但是对于应用开发人员来讲,可以忽略这些细节,只要关注对于文件系统的操作接口就可以了。这里列举一些基本的操作。
1). 打开。对于文件,要打开之后才能进行读取,实际上是通过文件名到文件句柄的一个转换。文件句柄是操作系统提供的内核对象,它使平台能更好的进行文件的实时管理,比如说可读写,创建,或者多任务的时候,能够解决一些冲突。总之一句话,打开操作让当前程序获得了对文件读写的权限。
2). 关闭。打开文件之后,要记得关闭这个文件,否则删除或者获取文件信息这样的操作将会出现问题。就像malloc必须free一样,Open-Close也是一对操作。Close意味着向操作系统释放一个内核对象,也解除了对这个文件的一个锁定。另外,有些系统Close的时候,才会将数据真正写回磁盘,所以有的童鞋可能会遇到‘明明调了fwrite成功但是文件却没有内容’的问题。
3). 读取。读取是将文件的数据或者一部分数据读取到内存中。这个函数调用的时候,一定要判断返回值,对错误要进行严格的处理,不然会导致文件数据并不是你想的格式,从而出现一些莫名其妙的问题。读取操作对应了读权限,如果打开文件的时候,没有申请读的权限,可能会导致无法读取的错误。
4). 写入。写入时将内存中的数据写入磁盘上的文件。调用这个操作的时候,要查看是否打开文件的时候,申请了写的权限。跟读取一样,要严格判断返回值。在一些设备上,还要判断是否有足够的剩余空间,如果磁盘空间非常少的话,就没有必要写文件了,不然导致了一些问题,得不偿失。
5). 删除。就是将当前文件从文件系统中抹去,这样在文件列表中,就看不到当前的文件了。
6). 重命名。这个操作很多情况下会遇到,比如写一些配置文件的时候,一定要先写临时文件,最后再重命名成真正的文件名。这样做的目的,是防止中途出错。有的时候,老的配置文件,需要等当前的临时文件真正完成了,才能删除。
7). 查找。查找的思路基本所有的系统都是一样的。首先,输入查找的参数进行初始化查找而获取一个句柄,这样根据这个句柄,可以一直NEXT的下去,直到最后一个文件为止。
- 抽象的操作系统(四) --- 文件
- 抽象的操作系统(一) --- 前言
- 抽象的操作系统(二) --- GDI
- 抽象的操作系统(五) --- 内存
- 抽象的操作系统(六) --- 网络
- 抽象的操作系统(七) --- 程序
- 抽象的操作系统(八) --- 进程
- 抽象的操作系统(九) --- 硬件系统
- 《操作系统》总结四(文件管理)
- 操作系统(四):文件管理、文件系统
- 《操作系统》总结四(文件管理)
- 操作系统的三个抽象概念
- 操作系统理论的探索: (之四)
- 操作系统(四)-------进程的基本概念
- 抽象的操作系统(十) --- 中间件(完)
- 对S3C2440裸板程序设计(无操作系统)的抽象
- 抽象的操作系统(三) --- 事件及处理
- 操作系统(四)
- 基于MyBatis3.0.6的基本操作介绍
- linux下多线程连接mysql(C语言)
- Mysql主从同步架构图和原理
- 伸展树
- 按顺序载入多张位图
- 抽象的操作系统(四) --- 文件
- new内存失败后的正确处理
- RBAC在PHP中的应用
- 守护进程(daemon)
- 自适应不同分辨率的屏幕大小、方向和不同分辨率的字体大小
- PHP的单引号和双引号 字符串效率
- linux 内核分析之list_head
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- Java中数据输入输出流——DataInputStream和DataOutputStream