回到以前的位置会比寻找新的位置更快吗?

如果我有一个C代码

off_t off = ftello(f); fseeko(f, some_location); // do some work fseeko(off); 

第二个fseeko和第一个一样慢吗? 我曾以为文件块总是被caching,所以第二个可以更快。

在我在Linux上的分析结果中,第二个fseek的成本相似。 这是预期的吗?

在大多数实现中, fseek调用几乎是空闲的,因为它只是在FILE对象中设置位置。 实际读取数据时会产生成本。 此时,重读已经读取的块很有可能从缓冲区缓存中受益。 但是操作系统正在进行预测性的预读操作,以至于最近读取的块之后的块也在缓冲区缓存中(这可能与第二次搜索的情况相同)。

对于书写来说,测量时间更加复杂,因为写入的数据块不一定会立即存入永久存储器; 只要数据已被复制到缓冲区缓存中, write系统调用就会立即返回。

第二个fseeko和第一个一样慢吗?

有可能。

你可以看到你对缓存的看法,但只有在处理FS块大小倍数的情况下。

我建议在文件系统中实现fseek()是如何实现的。 因为除了fseeko()。“的偏移参数之外,fseeko()函数与fseek(3)(参见fseek(3))相同。