[英]why fseek never return -1
我正在使用ubuntu 14.04並嘗試讀取二進制文件,但是fseek從不為文件大小返回-1。
為什么會這樣?
#include <stdio.h>
int main() {
const char *fn = "myfile";
FILE * fid;
fid = fopen(fn, "r");
int flag;
while(1) {
flag = fseek(fid, sizeof(float), SEEK_CUR);
printf("flag: %d\n",flag);
if(flag)
break;
}
}
簡短原因:尋求超過文件大小的位置在fseek
不視為錯誤。
以下部分引自man 3 fseek
:
返回值
rewind()
函數不返回任何值。 成功完成后,fgetpos()
,fseek()
,fsetpos()
返回0
,而ftell()
返回當前偏移量。 否則,返回-1
並將errno設置為指示錯誤。錯誤
EBADF
指定的流不是可搜索的流。
EINVAL
whence參數到fseek()
沒有被SEEK_SET
,SEEK_END
,或SEEK_CUR
。 或:結果文件偏移量將為負。
意思是:
// This is not an error
int ret_0 = fseek(file, 1, SEEK_END);
assert(ret_0 == 0);
// While this is an error
int ret_1 = fseek(file, -1, SEEK_SET);
assert(ret_1 == -1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.