2013-04-27 56 views
1

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

  1. 如果寻求原点设置为SEEK_SETSEEK_CUR和下一位置的结果超出了文件的大小?
  2. 如果寻求原点设置为SEEK_END和下一个位置的结果小于0

被调整为位置的文件,以适应它,或者是有一些返回错误代码(什么与位置指针再发生)?

请帮忙。

+0

通过研究C stdio的自由软件实现(例如[MUSL libc](http://musl-libc.org/),其源代码非常易读),您可以对您的问题有一个很好和详细的答案。和[fseek(3)手册页](http://linux.about.com/library/cmd/blcmdl3_fseek.htm)也应该告诉你应该发生什么。此外,底层操作系统是相关的(是一些Posix或Unix或Linux,或其他?) – 2013-04-27 12:22:53

回答

2

试试man FSEEK欲了解详细内容:

的FSEEK()函数设置流的流指向的文件位置指示器。以字节为单位的新位置是通过将偏移字节添加到whence指定的位置来获得的。如果将其设置为SEEK_SET,SEEK_CUR或SEEK_END,则偏移量分别与文件的起始位置,当前位置指示符或文件结束相关。成功调用fseek()函数将清除流的文件结束指示符,并取消对同一个流上的ungetc(3)函数的任何影响。

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