Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在Linux上以最快的方式写入二进制文件?_C_Linux_File_Binaryfiles_File Writing - Fatal编程技术网

C 如何在Linux上以最快的方式写入二进制文件?

C 如何在Linux上以最快的方式写入二进制文件?,c,linux,file,binaryfiles,file-writing,C,Linux,File,Binaryfiles,File Writing,我正在从事一个C项目,我们必须在嵌入式Linux环境(2.6.37)中编写一些二进制文件。通常情况下,我们可以在200-300毫秒左右的时间内写入文件,但最终需要10秒才能写入文件,我们不知道为什么—这种情况非常随机,在系统的其他部分(如UI应用程序中)没有发生特殊事件 我们正在修改或修改写入文件的方法,并在web上进行一些研究(并且我们得出结论,使用本机Linux代码编写要比使用纯C代码更好,尽管这可能不会对我们的问题有多大帮助。现在我们以类似的方式编写,也就是说,使用这些函数: #inclu

我正在从事一个C项目,我们必须在嵌入式Linux环境(2.6.37)中编写一些二进制文件。通常情况下,我们可以在200-300毫秒左右的时间内写入文件,但最终需要10秒才能写入文件,我们不知道为什么—这种情况非常随机,在系统的其他部分(如UI应用程序中)没有发生特殊事件

我们正在修改或修改写入文件的方法,并在web上进行一些研究(并且我们得出结论,使用本机Linux代码编写要比使用纯C代码更好,尽管这可能不会对我们的问题有多大帮助。现在我们以类似的方式编写,也就是说,使用这些函数:

#include <stdio.h>
const unsigned long long size = 8ULL*1024ULL*1024ULL;
unsigned long long a[size];

int main()
{
    FILE* pFile;
    pFile = fopen("file.binary", "wb");
    for (unsigned long long j = 0; j < 1024; ++j){
        //Some calculations to fill a[]
        fwrite(a, 1, size*sizeof(unsigned long long), pFile);
    }
    fclose(pFile);
    return 0;
}
#包括
常数无符号长长尺寸=8ULL*1024ULL*1024ULL;
无符号长a[size];
int main()
{
文件*pFile;
pFile=fopen(“file.binary”,“wb”);
for(无符号长j=0;j<1024;++j){
//填写[]的一些计算
fwrite(a,1,大小*sizeof(无符号长),pFile);
}
fclose(pFile);
返回0;
}
好吧,我想知道的是,哪一种是执行等效操作的本机Linux方式(并且是以最快的方式)?上面提到的链接只说明复制文件,而不是简单地写入文件,所以我想可能会用到更具体的函数


感谢您提供的任何帮助(以及有关原始问题的任何提示)。

听起来您在向SD卡或micro SD卡写信。并不是所有的卡片都是平等创建的。从你能找到的最快的开始。我推荐SanDisk Extreme Pro。他们声称能够每秒存储高达90Mbit的数据

第二,你的“随机”评论导致SD卡可能进行负载平衡。该卡实际上内部有一个小型cpu,可以根据扇区命中率进行存储重新分配。他们这样做是为了延长sd卡的寿命


如果向sd卡写入少量数据,它将进入sd卡本身的ram内部缓冲区。通常它们的大小为每个块512字节。有时,它们有多个“缓存”块,从而提高吞吐量。这为小文件大小提供了优异的性能。另外,请注意512。如果您可以将写入内容匹配为512个数据块,那么您将以最快的方式传输到底层介质。也就是说,不要写小于该大小的内容;-)

很难说没有细节,但我敢打赌问题不在于文件写入方法,而在于其他一些东西,因为我无法想象这需要10秒。它能并行写入吗?有文件锁定吗?会不会出现僵局?这种计算会不仅仅是计算吗?计算需要多长时间?什么是设备?它真的是一个本地文件系统吗?80亿项,8字节/项,8位/字节=512千兆位。在0.2秒内写入512千兆位意味着您的写入带宽为2.5 TB/秒。这速度太快了,特别是对于嵌入式系统。我一点也不相信你,除非你在建造一台嵌入式超级计算机。这听起来像是“忘了做这件事”。或者是XY问题。@TobySpeight我认为比这更糟糕。假设您正在向DRAM写入数据,而DRAM有一条64位总线。DRAM必须以40GHz的频率运行,才能维持2.5TB/秒的速率。没有运行在40GHz的DRAM,也没有处理器可以以这种速度写入DRAM。使用当前技术,您需要1024位宽的DRAM总线来维持2.5 TB/秒的数据速率。