C语言 ftello/fseeko vs fgetpos/fsetpos



ftello/fseekofgetpos/fsetpos之间有什么区别?两者似乎都是使用不透明偏移类型的文件指针获取/设置函数,有时允许64位偏移。

它们是在不同的平台上支持还是由不同的标准支持?它使用的偏移类型是否更灵活?

顺便说一句,我知道fgetpos/fsetpos和ftell/feek之间的区别,但这是而不是的重复。这个问题问的是ftell/fseek,答案是不适用于ftello/fseeko。

有关差异的详细信息,请参阅Portable Positioning。摘录:

在一些文本流与二进制流确实不同的系统上,不可能将文本流的文件位置表示为从文件开头开始的字符数。例如,某些系统上的文件位置必须对文件中的记录偏移量和记录中的字符偏移量进行编码。

因此,如果您希望您的程序可移植到这些系统,您必须遵守某些规则:

  • 从文本流上的ftell返回的值与到目前为止读取的字符数没有可预测的关系。唯一可以依赖的是,您可以随后将其用作fseek或fseeko的偏移量参数,以移回相同的文件位置
  • 在对文本流上的fseek或fseeko的调用中,偏移量必须为零,或者其中必须为SEEK_SET,并且偏移量必须是对同一流上的ftell的早期调用的结果
  • 文本流的文件位置指示符的值是未定义的,而有些字符已被ungetc推回,但尚未读取或丢弃。请参阅未读

简而言之:fgetpos/fsetpos使用更灵活的结构来存储关于文件位置状态的额外元数据,从而实现更大的可移植性(理论上)。

相关内容

  • 没有找到相关文章

最新更新