fseek - 用來讀寫一個數(shù)據(jù)塊的函數(shù)
int fseek - FILE *stream, long offset, int fromwhere;函數(shù)設(shè)置文件指針stream的位置。如果執(zhí)行成功,stream將指向以fromwhere為基準(zhǔn),偏移offset(指針偏移量)個字節(jié)的位置,函數(shù)返回0。如果執(zhí)行失敗 - 比如offset超過文件自身大小,則不改變stream指向的位置,函數(shù)返回一個非0值。
功能
重定位流 - 數(shù)據(jù)流/文件上的文件內(nèi)部位置指針。
注意:不是定位文件指針,文件指針指向文件/流。位置指針指向文件內(nèi)部的字節(jié)位置,隨著文件的讀取會移動,文件指針如果不重新賦值將不會改變指向別的文件。
描述
函數(shù)設(shè)置文件指針stream的位置。如果執(zhí)行成功,stream將指向以fromwhere(偏移起始位置:文件頭0 - SEEK_SET,當(dāng)前位置1 - SEEK_CUR,文件尾2 - SEEK_END)為基準(zhǔn),偏移offset(指針偏移量)個字節(jié)的位置。如果執(zhí)行失敗 - 比如offset超過文件自身大小,則不改變stream指向的位置。
fseek函數(shù)和lseek函數(shù)類似,但lseek返回的是一個off_t數(shù)值,而fseek返回的是一個整型。
返回值
成功,返回0,失敗返回-1,并設(shè)置errno的值,可以用perror - 函數(shù)輸出錯誤。
注意事項
fseek函數(shù)的文件指針,應(yīng)該為已經(jīng)打開的文件。如果沒有打開的文件,那么將會出現(xiàn)錯誤。fseek函數(shù)也可以這樣理解,相當(dāng)于在文件當(dāng)中定位。這樣在讀取規(guī)律性存儲文件時可以利用其OFFSET偏移量讀取文件上任意的內(nèi)容。
fseek函數(shù)一般用于二進(jìn)制文件,也可以用于文本文件。用于文本文件操作時,需特別注意回車換行的情況:因為在一般瀏覽工具如UltraEdit中,回車換行視為兩個字符0x0D和0x0A,但真實的文件讀寫和定位時卻按照一個字符0x0A進(jìn)行處理,因此碰到此類問題時,可以考慮將文件整個讀入內(nèi)存,然后在內(nèi)存中手工插入0x0D的方法,這樣可以達(dá)到較好的處理效果。
