我需要一个能在linux中创建固定大小的文件的函数。像truncate
或fopen,fseek,fclose
这样的函数不是解决方案,因为它们会用零填充打开的文件,但它没有必要,我没有时间这样做。那么是否有一些函数,只打开一个固定长度的文件,而不是填充缓冲区?
提前致谢。
答案 0 :(得分:10)
系统调用truncate(2)
未使用零填充文件。它只是提升文件的报告大小并在其中留下漏洞。
当你从中读取时,你做得到零,但这只是操作系统的便利。
truncate()和ftruncate()函数会导致名为的常规文件 通过路径或由fd引用被截断为精确的大小 长度字节。
如果以前的文件较短,则会进行扩展,并进行扩展 part 读取为空字节('\ 0')。
关于漏洞(来自TLPI):
孔的存在意味着文件的标称尺寸可能更大 而不是它使用的磁盘存储量(在某些情况下, 相当大)。
文件系统和漏洞:
不是为文件中的孔分配空字节块,而是 文件系统只能标记(值为0)适当的指针 i节点和间接指针块表示它们 不要引用实际的磁盘块。
如Per Johansson所述,这取决于文件系统。
大多数原生UNIX文件系统都支持文件漏洞的概念,但是 许多非本地文件系统(例如,微软的VFAT)没有。在一个 不支持漏洞的文件系统,显式空字节 写到文件。