我正在Linux操作系统上用C做一个驱动器基准测试,在NTFS文件系统上遇到了一个问题。下面是一些编写许多新文件的代码:
for ( int i = 0; i < 100; ++i )
{
fd = open(nextfile, O_WRONLY | O_DIRECT | O_SYNC | O_CREAT );
write(fd, buff, size);
fsync(fd);
close(fd);
}
这很好,但是当我想读取所有创建的文件时,fsync函数似乎不起作用。下面是一些读取所有文件的代码:
for ( int i = 0; i < 100; ++i )
{
fd = open(nextfile, O_RDONLY | O_DIRECT | O_SYNC);
read(fd, buff, size);
fsync(fd);
close(fd);
}
在测试旧的pendrive时,我得到的时间是写时4mb/s,读时267mb/s,这显然不是真的,但是在测试ext4文件系统时,读取时间是正确的。我该怎么办?
最佳答案
在执行读取测试之前卸载文件系统是确保不缓存任何内容的常见方法。读取例程中的fsync()基本上是无意义的(但可能会导致根据装载选项刷新文件访问时间戳)。我假设提供的代码只是一个草图,但我希望您的实际代码是测试open和read的返回值。
关于c - 在NTFS上读取文件时如何清除C中的驱动器缓存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15223229/