【发布时间】:2011-10-12 17:08:18
【问题描述】:
我正在用 C++ 编写一个基准测试工具,我想在实验之间清除文件系统内存缓存。我知道以下控制台命令:
sync
echo 3 > /proc/sys/vm/drop_caches
我的问题是如何直接在 C++ 中以编程方式执行此操作?
感谢任何帮助!
【问题讨论】:
我正在用 C++ 编写一个基准测试工具,我想在实验之间清除文件系统内存缓存。我知道以下控制台命令:
sync
echo 3 > /proc/sys/vm/drop_caches
我的问题是如何直接在 C++ 中以编程方式执行此操作?
感谢任何帮助!
【问题讨论】:
这样的事情应该可以解决问题:
int fd;
char* data = "3";
sync();
fd = open("/proc/sys/vm/drop_caches", O_WRONLY);
write(fd, data, sizeof(char));
close(fd);
【讨论】:
sync。
写信给它:
sync();
std::ofstream ofs("/proc/sys/vm/drop_caches");
ofs << "3" << std::endl;
【讨论】:
更好的方法是使用syncfs() 仅同步包含您的描述符的文件系统。或者更好的是,只需使用fsync()。
int fd = open(...); // Open your files
write(...); // Your write calls
fsync(fd); // Sync your file
close(fd); // Close them
如果您的描述符无效,fsync() 可能会失败。如果返回-1,则查找errno。
【讨论】: