写入后计算文件偏移量
我正在编写一个程序,将所有写入记录到一个文件中,并且在进程终止之前,我将所有写入写入到位,即从日志到实际文件。现在,在日志中,每个记录的类型如下:
offset, length, data
在写入之后,我需要计算偏移量,以便当我最终写入实际文件时可以查找到该位置,以便写入下一个写入或读取。
当前偏移位置+写入的字节会给出写入后的文件偏移量吗?
谢谢
I am writing a program where I log all writes to a file and just before process termination I write all writes in place i.e from log to actual file. Now, in the log each record of type something like :
offset, length, data
After a write I need to calculate the offset so that I can lseek to that position when i finally write in the actual file so as to write the next write or for read.
Will current offset position+bytes written give me the file offset after a write.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 fgetpos 获取文件偏移量和 fsetpos 设置文件偏移量。
Use fgetpos to get the file offset and fsetpos to set the file offset.
有多种方法可以实现这一目标:
第一种方法(在这种情况下,排名将自动更新为您已阅读的内容。)
第三条路
第四种方式(便携性较差)
func() 和 func64() 之间的区别在于 func64() 使用正确的 64 位偏移量,这消除了超过 4Gb 的文件的问题,而 func() 使用 < em>int 类型,可以是 32 位或 64 位,具体取决于体系结构。
fseeko() 和 ftello() 函数与 fseek() 和 ftell() 相同,只是fseeko() 的 offset 参数和 ftello() 的返回值类型为 off_t,而不是 long 类型。
总之,最佳实践是使用 fgetpos64()/fsetpos64() 或 ftello64()/fseeko64()。
尽可能避免使用 ftell() 和 fseek()。
There are several ways to achieve that:
First Way (In this case position will be updated automatically to how much you have read.)
Second Way (most portable)
Third Way
Fourth Way (less portable)
The difference between func() and func64() is that func64() uses correct 64-bit offset which eliminates problem with files more than 4Gb, while func() uses int type which could be 32 or 64 bits, depending on the architecture.
The fseeko() and ftello() functions are identical to fseek() and ftell() except that the offset argument of fseeko() and the return value of ftello() is of type off_t instead of long.
As a conclusion the best practice is to use fgetpos64()/fsetpos64() or ftello64()/fseeko64().
As much as possible try to avoid any using of ftell() and fseek().