起因
我当时学这个文件io的时候,也是懵懵懂懂的,就知道,open read write close lseek fflush那些,其实也没明白是怎么回事。
数据流是指在计算机系统中,程序与文件之间进行数据交换的过程。当你在程序中执行文件操作,如读取、写入、修改等,这些操作都涉及到数据在程序和文件之间的传输,这个过程就是文件IO的数据流。
文件管理系统
自从学习了flash,我之前就好奇了,flash是可以作为一个管理空间,但是,对于一个文件来说,如果把数据存储在flash中,那么,如何进行精确的修改呢?这个flash肯定是要先刷新才能使用的啊,为什么好像使用这些文件io的时候,可以那么顺利呢?其实,如果是追加的话,其实还是可以理解的,就是通过系统去链接起来,调用系统的文件io就可以实现文件完整使用和读取,所以,哪怕文件不是连续地址,也可以实现文件追加。读就更容易了,写呢?如果在原有基础上写呢?所以,我就像这种情况肯定是要刷新flash的区块来实现的。恰好,我想起来了数据流的概念。
数据流
使用文件io的时候,就会到打开这个文件,同时把所有数据通过数据流的形式导出来,我们对着这个数据流进行修改。这个数据流,可以认为就是系统把这一段空间都读取出来了,我们对着这个字符串进行操作而已。
在Flash存储中,当你需要修改一个文件时,操作系统和文件系统会采取一些策略来确保不会影响到其他文件:
- 写入时复制(Copy-on-Write):在修改文件之前,系统会先将原始文件复制到另一个块,然后在新块上进行修改。这样,原始文件保持不变,新的修改内容存储在另一个块上。这种方法可以避免在修改过程中影响到其他文件。
- 垃圾回收(Garbage Collection):随着文件的修改和删除,Flash存储上可能会产生一些不再使用的空间。这些空间被称为垃圾。垃圾回收机制会定期运行,将这些垃圾空间整理并合并,以便于未来的文件存储和修改。
- 磨损平衡(Wear Leveling):Flash存储具有有限的写入次数,频繁写入同一块区域会导致磨损加速。为了避免这个问题,Flash存储控制器会实现磨损平衡策略,将写入操作分散到不同的块,以延长Flash存储的使用寿命。
- 日志结构(Log-Structured)文件系统:一些文件系统(如F2FS、Btrfs等)采用日志结构设计,将文件的元数据和实际数据分开存储。这种设计有助于减少对Flash存储的磨损,并提高文件系统的性能。
所以,我们不用担心回写导致flash错误的问题,这些都是通过文件管理系统区处理。
总结
数据流是一个非常迷糊的概念,只有使用open才会打开,使用close和fflush才会刷新保存,所以,如果在close和fflush之前电脑停电、蓝屏、死掉了等。哦吼,数据流就随着RAM一起没啦!此时就没了通过文件管理系统回写这个操作了。这个时候追悔莫及了,一无所有啦。