【发布时间】:2011-06-26 13:52:21
【问题描述】:
我正在编写一个程序,将所有写入记录到文件中,并且在进程终止之前,我将所有写入写入到位,即从日志到实际文件。现在,在日志中,每条记录的类型都类似于:
offset, length, data
写入后我需要计算偏移量,以便在我最终写入实际文件时可以找到该位置,以便写入下一个写入或读取。
当前偏移位置+写入的字节数会在写入后给我文件偏移量吗?
谢谢
【问题讨论】:
我正在编写一个程序,将所有写入记录到文件中,并且在进程终止之前,我将所有写入写入到位,即从日志到实际文件。现在,在日志中,每条记录的类型都类似于:
offset, length, data
写入后我需要计算偏移量,以便在我最终写入实际文件时可以找到该位置,以便写入下一个写入或读取。
当前偏移位置+写入的字节数会在写入后给我文件偏移量吗?
谢谢
【问题讨论】:
有几种方法可以实现:
第一种方式(在这种情况下,位置将自动更新为您已阅读的内容。)
第二种方式(最便携)
第三条路
Fourth Way(不太便携)
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()。
【讨论】: