【问题标题】:fseek would not return the expected locationfseek 不会返回预期的位置
【发布时间】:2021-02-01 19:45:24
【问题描述】:

我有一个函数试图到达文件内容的最后一个索引。当我使用下面给出的描述符和 lseek 组合时,一切正常:

offset = lseek(infd, 0, SEEK_END);

导致偏移量:39(文件的字节大小)

infd 为 3

offset = fseek(file1, 0, SEEK_END);

导致偏移量为 0

file1 指向 0x00007fff8897e320

当我尝试使用指向相同的文件指针时,为什么偏移会导致 0?

注意: offset 的类型是 off_t

【问题讨论】:

  • 您是否以文本模式打开文件? SEEK_END 对文本文件无效。
  • 我使用的是“rb”模式。 @LeeDanielCrocker
  • file1 指向 0x00007fff8897e320:这无关紧要。文件指针的内容或它指向的东西是不透明的,你不应该关心它。

标签: c pointers memory file-handling


【解决方案1】:

您正在使用fseek,如果您阅读documentation,您可以找到:

返回值

​0​成功,否则非零值。

另一方面,lseek documentation 读作:

返回值

成功完成后,lseek() 返回结果偏移量 从文件开头开始以字节为单位测量的位置。

希望这可以解决问题,下次我真的建议您阅读参考并检查返回值部分!

【讨论】:

  • 我明白了。我没有完全理解如何使用 fseek 将文件位置指示器设置到末尾。
  • @ankitrana_:你设置得很好。但是如果你想读回结果位置,你需要ftellftello(注意:在POSIX系统上更喜欢ftellofseeko,因为普通ftell不一定能处理大文件)成功后寻找。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多