据推测,这一行应该没有任何效果;从当前位置查找0个字节。然而,我在一些遗留代码中找到了这一行,如果没有这一行的话,似乎什么都不起作用——即使在python中,也有等效的fp.seek(0,os.seek_CUR(
它只是一个缓冲的东西,还是更深层次的东西?
C标准规定,在读取和写入到同一文件句柄之间切换时,必须查找。C11 7.21.5.3p7:
- 当以更新模式打开文件(
'+'
是上述模式参数值列表中的第二个或第三个字符(时,可以对相关流执行输入和输出。但是,在没有对fflush
函数或文件定位函数(fseek
、fsetpos
或rewind
(的干预调用的情况下,输出后不应直接跟着输入,并且在没有对文件定位函数的干预调用情况下,输入后不应直接输出,除非输入操作遇到文件结尾。[…]
C标准修订版C11 7.21.9.2p5:中fseek
的所有副作用
- 确定新位置后,对
fseek
函数的成功调用将取消ungetc
函数对流的任何影响,清除流的文件结束指示符,然后建立新位置。在成功的fseek
调用之后,对更新流的下一个操作可以是输入或输出
并非所有这些都适用于Python 3,因为Python 3实际上尽可能绕过C stdio;Python甚至没有公开CCD_ 10。Python 2文件是stdio流的一个更薄的包装器。