【问题标题】:How to quickly create large files in C?如何在 C 中快速创建大文件?
【发布时间】:2013-05-22 12:14:49
【问题描述】:

我正在研究文件系统性能,但我对如何在 C 中非常快速地创建一个非常大的文件感到困惑。基本上,我试图通过获取此元数据并存储来重新创建文件系统的文件夹和文件将其放入文件中。这是提取过程。稍后,我想使用我之前提取的元数据将这些文件夹和文件恢复到现有的新文件系统(在本例中为 ext3)。

在还原过程中,我已经成功创建了所有文件夹。但是,我对如何立即创建文件有点困惑。对于我要创建的每个文件,我都有一个文件大小和一个文件路径。我只是对如何快速设置文件大小感到困惑。

我使用了truncate,但是从文件系统的角度来看,这似乎不会影响磁盘空间的使用。

谢谢!

【问题讨论】:

    标签: c filesystems filesize ext3 ext2


    【解决方案1】:
    #include < stdio.h >
    #include < stdlib.h >
    
    int main() {
        int i;
        FILE *fp;
    
        fp=fopen("bigfakefile.txt","w");
    
        for(i=0;i<(1024*1024);i++) {
            fseek(fp,(1024*1024), SEEK_CUR);
            fprintf(fp,"C");
        }
    
        fclose(fp);
        return 0;
    }
    

    【讨论】:

    • 也添加 fclose(fp) ! ^_^
    • 已添加。返回值也应该给出。谢谢!
    • 对不起,@liuml07 我不明白一些事情。每次循环时,我们将位置向前移动 (1024*1024),此时我们在该位置写一个字符“C”。在这些寻求之间发生了什么? ext3 是如何处理这个问题的?文件系统块实际上是在没有任何数据的情况下分配的吗?
    • 没有为未触及的块分配文件系统数据区域。该程序正在创建一个稀疏文件。
    • @user1198224 我在几年前就学会了这个技巧。 fseek 本身不会扩展文件的大小。看来我们应该在fseek() 之后在文件中现有数据的末尾写入至少一个字节。其他块用 0 填充(我不确定)。这样就创建了稀疏文件。无论如何,fseek() 不是一个主要的系统服务,而是一个库函数。我不知道如何回答 ext3 的问题。
    【解决方案2】:

    没有办法立即做到。

    您需要将文件的每个块都写入磁盘,这将花费大量时间,尤其是对于大文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多