假设我们的目的是在运行Linux的嵌入式设备上创建一个开头有大洞的文件,我们稍后将写入该文件。我们打开文件,获取一个文件描述符并在其上调用lseek
来寻找某个已知的位置。之后,当我们想要在查询到的位置写入该文件时,我们将其称为write
。写入文件中没有零填写Linux Linux
但是,在第一次写入时,由seek创建的空洞将被填满,如果空洞足够大,则此操作可能需要一些时间。在我的应用程序中,没有必要进行这种零初始化,因为这个孔的长度是确切的,我将在稍后填入我的数据。
有没有一种方法可以避免在seek
之后调用第一个write
调用(即使它涉及修改文件系统驱动程序)?或者,在文件开始之前是否有写入文件的方法(追加到文件的前面)?
你说得对。在我的情况下,运行'dd if =/dev/zero of =/mnt/mmc /任何bs = 1k seek = 100000'大约需要10秒钟,结果文件大小为97.7M。文件系统是vfat,不幸的是我不能改变这一点,因为我正在使用SD卡,它应该可以跨多个系统读取。 –
是的,没有一个FAT文件系统支持我知道的任何稀疏文件存储。有可能没有办法确切地得到你所要求的,但也许有一个很好的解决方案,你正试图解决的实际问题。 –
@NebojsaMrmak:看看这个[其他答案](http://stackoverflow.com/a/4396912/865874),HTH。 – rodrigo