据推测,这行代码应该没有作用;从当前位置寻求0字节。但我在一些旧的代码中发现了这行代码,如果没有它,似乎什么都不能工作——即使在Python中使用等效的fp.seek(0, os.SEEK_CUR)。
是缓存问题,还是更深层次的问题呢?
在C标准修订版C11 7.21.9.2p5中,
- 以更新模式打开文件(在上述模式参数值列表中,第二个或第三个字符为
'+'
),关联流可以执行输入和输出。然而,在没有调用fflush
函数或文件定位函数(fseek
、fsetpos
或rewind
)的情况下,不得直接使用输出操作后跟输入操作,也不得直接使用输入操作后跟输出操作,除非输入操作遇到了文件结束符。[...]
fseek
的所有副作用如下:
对于Python 3,并非所有情况都适用于C stdio,因为Python 3在尽可能的情况下绕过C stdio;而且Python甚至不公开
- 在确定新位置之后,成功调用
fseek
函数会撤销流上ungetc
函数的所有影响,清除流的文件结束标识,然后建立新位置。在成功的fseek
调用之后,更新流上的下一步操作可以是输入或输出。
ungetc
。Python 2文件只是C stdio流的一个薄包装器。
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.
- William Pursell