我可以以1 Gbps的速度写入硬盘吗

Can I write to hard disk at 1 Gbps?

本文关键字:硬盘 速度 Gbps 我可以      更新时间:2023-10-16

我对磁盘速度感到有点惊讶。。我似乎能够在1秒内写入1GB的文件。

size_t s = 1*1024*1024;
char* c = new char[s];
FILE* fx = fopen("D:\test.mine", "wb");
//ensure(fx);
for(int i = 0; i < 1024; ++i)
{
    fwrite(c,1,s,fx);
}
fclose(fx);
delete[] c;

我有点难以理解是什么原因造成的?我认为fclose确保了数据实际上写在硬盘上。。。?

用于写入文件的标准库函数只管理自己的内部缓冲区。在现代操作系统中对文件进行写入时,即使在fclose之后,数据实际上也只是进入操作系统的缓冲区,这将延迟写入,直到它认为这是一个好时机。

确保数据写入磁盘的常用方法是发出特定于操作系统的调用,强制写入磁盘;在POSIX上是fsync/sync,在Windows上您需要FlushFileBuffers

fclose只刷新C库缓冲区,不刷新系统缓冲区。因此,您需要一个系统调用,如(f)sync。

fclose()还会清除流的缓冲区缓存,因此在调用fclose的那一刻,未读缓冲区的内容就会被擦除。