我想创建一个稀疏文件,使得在我向它们写入数据之前,全零块不会占用实际的磁盘空间.可能吗?
对于默认的Mac OS X文件系统(HFS +)是否支持文件中的漏洞,似乎存在一些混淆.以下程序表明情况并非如此.
#include#include #include #include void create_file_with_hole(void) { int fd = open("file.hole", O_WRONLY|O_TRUNC|O_CREAT, 0600); write(fd, "Hello", 5); lseek(fd, 99988, SEEK_CUR); // Make a hole write(fd, "Goodbye", 7); close(fd); } void create_file_without_hole(void) { int fd = open("file.nohole", O_WRONLY|O_TRUNC|O_CREAT, 0600); write(fd, "Hello", 5); char buf[99988]; memset(buf, 'a', 99988); write(fd, buf, 99988); // Write lots of bytes write(fd, "Goodbye", 7); close(fd); } int main() { create_file_with_hole(); create_file_without_hole(); return 0; }
该程序创建两个文件,每个文件长度为100,000字节,其中一个文件的漏洞为99,988字节.
在HFS +分区上的Mac OS X 10.5上,两个文件占用相同数量的磁盘块(200):
$ ls -ls total 400 200 -rw------- 1 user staff 100000 Oct 10 13:48 file.hole 200 -rw------- 1 user staff 100000 Oct 10 13:48 file.nohole
而在CentOS 5上,没有空洞的文件比另一个消耗多88个磁盘块:
$ ls -ls total 136 24 -rw------- 1 user nobody 100000 Oct 10 13:46 file.hole 112 -rw------- 1 user nobody 100000 Oct 10 13:46 file.nohole
和其他Unix一样,它是文件系统的一个特性.文件系统支持所有文件,或者不支持.与Win32不同,您无需执行任何特殊操作即可实现.与Win32不同,使用稀疏文件没有性能损失.
在MacOS上,默认文件系统是HFS +,它不支持稀疏文件.
更新: MacOS用于支持具有稀疏文件支持的UFS卷,但已被删除.当前支持的文件系统都不支持稀疏文件.