2013-04-27 77 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設置爲指示錯誤。