当前位置:  开发笔记 > 编程语言 > 正文

如何在Mac OS X上以C编程方式创建稀疏文件?

如何解决《如何在MacOSX上以C编程方式创建稀疏文件?》经验,为你挑选了2个好方法。

我想创建一个稀疏文件,使得在我向它们写入数据之前,全零块不会占用实际的磁盘空间.可能吗?



1> titaniumdeco..:

对于默认的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



2> Colin Jensen..:

和其他Unix一样,它是文件系统的一个特性.文件系统支持所有文件,或者不支持.与Win32不同,您无需执行任何特殊操作即可实现.与Win32不同,使用稀疏文件没有性能损失.

在MacOS上,默认文件系统是HFS +,它支持稀疏文件.

更新: MacOS用于支持具有稀疏文件支持的UFS卷,但已被删除.当前支持的文件系统都不支持稀疏文件.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有