抽象的操作系统(四) --- 文件

来源:互联网 发布:淘宝商品详情模板设计 编辑:程序博客网 时间: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的下去,直到最后一个文件为止。
原创粉丝点击