如何在C中快速创建大型文件?

如何在C中快速创建大型文件?,c,filesystems,filesize,ext3,ext2,C,Filesystems,Filesize,Ext3,Ext2,我正在研究文件系统的性能,我被如何用C快速创建一个非常大的文件难倒了。基本上,我正在尝试通过获取元数据并将其存储到文件中来重新创建文件系统的文件夹和文件。这就是提取过程。稍后,我想使用之前提取的元数据将这些文件夹和文件恢复到现有的新创建的文件系统(在本例中为ext3)中 在还原过程中,我已经成功创建了所有文件夹。但是,对于如何立即创建文件,我有点困惑。对于我要创建的每个文件,我都有一个文件大小和文件路径。我只是对如何快速设置文件大小感到困惑 我使用了,但从文件系统的角度来看,这似乎不会影响磁盘空

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

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

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

谢谢

#包括
#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;
}
#包括 int main(){ int i; 文件*fp; fp=fopen(“bigfakefile.txt”,“w”); 对于(i=0;i
#包括
#包括
int main(){
int i;
文件*fp;
fp=fopen(“bigfakefile.txt”,“w”);

对于(i=0;i而言,没有办法立即完成


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

无法立即完成


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

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