【问题标题】:What happens with seek pointer?查找指针会发生什么?
【发布时间】:2013-04-27 12:18:25
【问题描述】:

我目前正在编写自己的 fseek 函数实现,我想问一下在几个原因中会发生什么。他们在这里:

  1. 如果搜索原点设置为SEEK_SETSEEK_CUR 并且下一个位置的结果超过文件大小?
  2. 如果seek origin设置为SEEK_END且下一个位置的结果小于0

文件是否调整大小以适应位置,或者是否返回了一些错误代码(位置指针会发生什么情况)?

请帮忙。

【问题讨论】:

  • 您可以通过研究 C stdio 的免费软件实现(例如,MUSL libc,其源代码可读性强),对您的问题有一个很好而详细的答案。 fseek(3) man page 也应该告诉你应该发生什么。此外,底层操作系统是相关的(是一些 Posix 或 Unix 或 Linux,还是其他什么?)

标签: c file file-io size seek


【解决方案1】:

尝试 man fseek 以获取更多详细信息:

fseek() 函数为 stream 指向的流设置文件位置指示符。新位置(以字节为单位)是通过将偏移字节添加到 wherece 指定的位置来获得的。如果 wherece 设置为 SEEK_SET、SEEK_CUR 或 SEEK_END,则偏移量分别相对于文件开头、当前位置指示符或文件结尾。成功调用 fseek() 函数会清除流的文件结束指示符并撤消 ungetc(3) 函数对同一流的任何影响。

成功完成后,fgetpos()、fseek()、fsetpos() 返回 0,ftell() 返回当前偏移量。否则,返回 -1 并设置 errno 以指示错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多