【发布时间】:2015-08-14 17:48:12
【问题描述】:
我在一个非常大的文件中运行 fseek(..) 时性能很差。
每次调用fseek函数,都需要将文件指针位置向后移动100 bytes:
fseek(fp, -100, SEEK_CUR);
以前,我是这样做的:
fseek(fp, (index)*100, SEEK_SET); // which makes basically the same...
我的问题是 fseek 如何在文件中移动指针并将文件指针设置在特定位置。
我认为它需要文件指针并将其向后移动,但现在我认为它真正的作用是
获取当前位置(
cp)添加负索引 (
p = idx + cp)并将文件指针从文件开头移动到该位置 (
fseek(fp, p, SEEK_SET))
【问题讨论】:
-
什么是开放的?是“a+b”还是“r+b”……我猜不是“a+b”也不是“追加”。
-
可能与底层文件系统的性能有关。
-
由于其他原因我无法使用附加打开文件,所以我需要打开它“r+b”
-
fseek 是否在这种模式下工作?
-
您描述的位置计算是标准指定的,但标准没有指定实现如何将流设置到该位置。我会惊讶地发现一个实现按照你的建议做了,但这是允许的。