gpt4 book ai didi

c - 如何在 C 中不缓冲地打开和读取文件?

转载 作者:行者123 更新时间:2023-12-01 13:42:00 25 4
gpt4 key购买 nike

我想对一个在文件上运行的算法进行基准测试。该算法迭代 N 轮,在每一轮中,它读取一个数据 block ,做一些神奇的事情并设置下一个 block 的偏移量。

伪代码如下:

int run_algorithm(int offset) {

char *fname = "database.dat";
fd = open(fname, O_RDONLY);

// read the desired block to memory
block_size = 1024 * 1024;
char *buf = malloc(block_size);
lseek(fd, offset, SEEK_SET);
read(fd, &buf, block_size);

int new_offset;
// do magic stuff with buf
// and set a new offset

close(fd);
return new_offset;
}

int main() {

int i;

//init offset
int offset = 0;

// iterate N times
for (i = 0; i < N; i++) {
offset = run_algorithm(offset);
}

return 0;
}

我知道操作系统有暖缓存和冷缓存。我想实现冷缓存案例。在每个 run_algorithm() 调用中,文件打开时不应有缓冲。换句话说,我不希望操作系统将部分文件存储在内存中的某个位置以加速 open() 和 seek()。

有没有办法在没有缓冲的情况下专门设置 open() 和 seek()?

最佳答案

您不能禁用硬盘驱动器和操作系统中的所有缓存。

但是如果您接受对程序之外的所有内容进行基准测试,那么您可以在 C 运行时库中禁用缓冲:

setvbuf(fd, NULL, _IONBF, 0);

您必须在 fopen 操作后立即调用该函数。请参阅 cpp reference page 中的详细信息.

关于c - 如何在 C 中不缓冲地打开和读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39302993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com