【问题标题】:what are the side-effects of fseek(fp, 0, SEEK_CUR)fseek(fp, 0, SEEK_CUR) 的副作用是什么
【发布时间】:2021-03-16 13:30:45
【问题描述】:

大概,这行应该没有效果;从当前位置寻找 0 个字节。 但是,我在一些遗留代码中找到了该行,如果没有该行,似乎没有任何工作 - 即使在 python 中,具有等效的 fp.seek(0, os.SEEK_CUR)

它只是一个缓冲的东西,还是更深层次的东西?

【问题讨论】:

  • A successful call to the fseek() function clears the end-of-file indicator for the stream and undoes any effects of the ungetc(3) and ungetwc(3) functions on the same stream.

标签: python c file-io


【解决方案1】:

C 标准规定,在 读取写入 到同一个文件句柄之间切换时,您必须寻找。 C11 7.21.5.3p7:

  1. 当使用更新模式('+' 作为上述模式参数值列表中的第二个或第三个字符)打开文件时,可以在关联的流上执行输入和输出。但是,如果没有对fflush 函数或文件定位函数(fseekfsetposrewind)的干预调用,则输出不应直接跟随输入,并且输入不应直接跟随输出没有对文件定位函数的干预调用,除非输入操作遇到文件结尾。 [...]

C 标准修订版C11 7.21.9.2p5fseek 的所有副作用:

  1. 确定新位置后,成功调用fseek 函数会撤消ungetc 函数对流的任何影响,清除流的文件结束指示符,然后建立新位置。成功调用fseek 后,更新流上的下一个操作可能是输入或输出。

并非所有这些都适用于 Python 3,因为 Python 3 实际上会尽可能绕过 C stdio; Python 也没有公开ungetc。 Python 2 文件是 stdio 流的更薄包装。

【讨论】:

  • 嗯,那就这样吧 - 它位于文件处理的读取和写入部分之间
猜你喜欢
  • 2018-04-25
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 2017-04-15
  • 2011-07-21
  • 2021-04-27
相关资源
最近更新 更多