fseek(fp,0,SEEK_CUR)的副作用是什么



据推测,这一行应该没有任何效果;从当前位置查找0个字节。然而,我在一些遗留代码中找到了这一行,如果没有这一行的话,似乎什么都不起作用——即使在python中,也有等效的fp.seek(0,os.seek_CUR(

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

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

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

C标准修订版C11 7.21.9.2p5:中fseek的所有副作用

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

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

最新更新