首页 文章

写入后计算文件偏移量

提问于
浏览
0

我正在编写一个程序,我记录所有写入文件,在进程终止之前,我写了所有写入,即从日志到实际文件 . 现在,在日志中每个类型的记录如下:

offset, length, data

在写入之后我需要计算偏移量,这样当我最终写入实际文件时,我可以找到该位置,以便写入下一个写入或读取 .

写入的当前偏移位置字节是否会在写入后给出文件偏移量 .

谢谢

2 回答

  • 1

    使用fgetpos获取文件偏移量,使用fsetpos设置文件偏移量 .

  • 0

    有几种方法可以实现这一目标:

    • First Way (在这种情况下,位置将自动更新为您已阅读的数量 . )

    • 将所有日志内容读入内存

    • 按(偏移长度)增长排序

    • 使用连续的读取调用

    • Second Way (最便携)

    • 使用 fgetpos(), fgetpos64()fsetpos(),fsetpos64() 功能集 .

    • Third Way

    • 使用 ftello(), fseeko()ftello64(), fseeko64() 功能集 .

    • Fourth Way (不太便携)

    • 使用 ftell(), fseek()ftell64(), fseek64() 功能集 .

    func()func64() 之间的区别在于func64()使用正确的64位偏移量,这消除了超过4Gb的文件的问题,而func()使用的int类型可能是32位或64位,具体取决于体系结构 .

    fseeko()ftello() 函数与 fseek()ftell() 相同,只是fseeko()的偏移量参数和ftello()的返回值的类型为off_t而不是long .

    最后,最佳做法是使用fgetpos64()/ fsetpos64()或ftello64()/ fseeko64() . 尽量避免使用ftell()和fseek() .

相关问题