我目前正在编写我自己的 fseek 函数实现,我想问几个原因会发生什么。他们来了:
- 如果搜索原点设置为
SEEK_SET
orSEEK_CUR
并且下一个位置的结果超过文件大小? - 如果搜索原点设置为
SEEK_END
并且下一个位置的结果小于 0
文件是否调整了位置以适应它,或者是否返回了一些错误代码(位置指针会发生什么情况)?
请帮忙。
尝试 man fseek 以获取更多详细信息:
fseek() 函数为 stream 指向的流设置文件位置指示符。新位置(以字节为单位)是通过将偏移字节添加到 wherece 指定的位置来获得的。如果 wherece 设置为 SEEK_SET、SEEK_CUR 或 SEEK_END,则偏移量分别相对于文件开头、当前位置指示符或文件结尾。成功调用 fseek() 函数会清除流的文件结束指示符并撤消 ungetc(3) 函数对同一流的任何影响。
成功完成后,fgetpos()、fseek()、fsetpos() 返回 0,ftell() 返回当前偏移量。否则,返回 -1 并设置 errno 以指示错误。