簡體   English   中英

為什么fseek從不返回-1

[英]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_SETSEEK_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM