我尝试在 Linux 机器上使用 c++ fopen、fwrite 和 fflush 和 fclose 函数创建大约 4 GB 的文件,但我观察到 fclose() 函数需要很长时间才能关闭文件,大约需要(40-50 秒)。我检查了不同的论坛以找到这种缓慢的原因,按照论坛中的建议更改了代码,使用 setvbuf() 函数使无缓冲 I/O 与 write() 函数一样。但仍然无法解决问题。
totalBytes = 4294967296 // 4GB file
buffersize = 2000;
while ( size <= totalBytes )
{
len = fwrite(buffer, 1, bufferSize, fp);
if ( len != bufferSize ) {
cout<<"ERROR (Internal): in calling ACE_OS::fwrite() "<<endl;
ret = -1;
}
size = size + len;
}
...
...
...
fflush(fp);
flcose(fp);
任何解决上述问题的方法都会非常有帮助。
谢谢,
拉梅什
操作系统正在推迟对磁盘的实际写入,并且可能不会在任何写入操作中实际将数据写入磁盘,甚至在fflush()
.
我查看了手册页fflush()
并看到以下注释:
请注意,fflush() 仅刷新由提供的用户空间缓冲区
C 库。确保数据物理存储在磁盘上
内核缓冲区也必须被刷新,例如,使用sync(2)或
同步(2)。
(有一个类似的注释fclose()
同样,尽管 Linux 系统上的行为似乎有所不同)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)