gpt4 book ai didi

linux - 在 Linux 中写入文件而不用零填充

转载 作者:IT王子 更新时间:2023-10-29 00:00:57 24 4
gpt4 key购买 nike

假设我们的目的是在运行 Linux 的嵌入式设备上创建一个开头有一个大洞的文件,稍后我们将写入该文件。我们打开文件,获取文件描述符并对其调用 lseek 以查找某个已知位置。之后,当我们想要在搜索到的位置写入该文件时,我们对其调用 write

但是,在第一次写入时,通过查找创建的空洞会被零填充,如果空洞足够大,则此操作可能需要一些时间。在我的应用程序中,不需要这个零初始化,因为洞的长度是精确的,我稍后会用我的数据填充它。

有没有办法避免在 seek 之后的第一个 write 调用零填充漏洞(即使它涉及修改文件系统驱动程序)?或者,有没有一种方法可以在文件开头之前写入文件(附加到文件的前面)?

最佳答案

这可能与您的文件系统有关。在 ext2/3/4、reiser、btrfs、xfs 等上,执行您描述的操作应该不会花费很长时间,因为它们支持所谓的“稀疏文件”(占用底层存储中的空间小于文件的大小,因为零的运行没有物理存储)。

您可以尝试使用 dd 进行实验以确保是这种情况:

$ dd if=/dev/zero of=whatever bs=1k seek=1073741824 count=1
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 9.1878e-05 s, 11.1 MB/s
$ ls -al whatever
-rw-r--r-- 1 xxxx xxxx 1099511628800 Jan 31 18:04 whatever
$ du -h whatever
16K whatever

在你的文件系统上,这可能会失败。如果是这样,您需要创建一个稀疏文件,确定您是否可以使用不同的文件系统。

关于linux - 在 Linux 中写入文件而不用零填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com