写入后计算文件偏移量

时间:2011-06-26 13:52:22

标签: c linux file offset

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

 offset, length, data

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

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

谢谢

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

  1. 第一种方式(在这种情况下,位置会自动更新为您已阅读的数量。)

    1. 将所有日志内容读入内存
    2. 按(偏移+长度)增长对其进行排序
    3. 使用连续的阅读电话
  2. 第二种方式(最便携式)

    1. 使用 fgetpos(),fgetpos64() fsetpos(),fsetpos64()一组功能。
  3. 第三种方式

    1. 使用 ftello(),fseeko() ftello64(),fseeko64()一组功能。
  4. 第四种方式(不太便携)

    1. 使用 ftell(),fseek() ftell64(),fseek64()一组功能。
  5. func() func64()之间的区别在于func64()使用正确的64位偏移量,这消除了超过4Gb的文件问题,而func( )使用 int 类型,可以是32位或64位,具体取决于架构。

    fseeko() ftello()功能与 fseek() ftell()完全相同除了fseeko()的 offset 参数和ftello()的返回值属于 off _t而不是 long

    作为结论,最佳做法是使用fgetpos64()/ fsetpos64()或ftello64()/ fseeko64()。 尽量避免使用ftell()和fseek()。