将数据预先添加到文件中

时间:2011-04-06 00:30:23

标签: filesystems prepend

在任何操作系统中都没有办法让我知道一个程序能够有效地数据预先添加到文件中。 然而,这似乎并不困难 - 如果需要,文件系统可以为文件描述符添加另一个范围。

所以问题是,为什么操作系统不执行这个(相当简单的)操作?

2 个答案:

答案 0 :(得分:7)

我认为这并不像你建议的那么容易。确实,文件系统可以分配一个新块,将前置数据存储在其中,将文件指针更改为指向该块,然后从该块链接文件的其余部分。就像在链接列表的前面添加节点一样,对吗?

但是,当(可能是这种情况)前置数据未填充指定的块时会发生什么。我不认为许多文件系统会有链接部分块的机制,但即使他们这样做也会导致巨大的低效率。您最终会得到一个由大多数空块组成的文件,您必须读取和写入整个文件以对其进行碎片整理。当你首先进行前置时,也可以预先进行读写操作。

答案 1 :(得分:0)

在向文件添加或附加数据时,始终存在分配空间的问题。由于文件描述符指向文件流的开头,因此为文件添加额外空间要比预先添加容易得多。如果要附加到文件,则无需更改文件描述符,只需更改文件大小和分配的内存。如果要预先添加到文件,则必须立即实例化新文件描述符,或者先将前置数据写入,或者在更新原始数据时存储预先添加的数据的位置。

制作新的文件描述符可能很棘手,因为您还必须更新指向它的任何引用。这就是为什么操作系统很容易实现附加数据并且稍微难以实现前置。