2015-02-08 49 views
0

我有以下代碼:FSEEK不空文件工作

int main(int argc,char *argv[]){ 

    FILE *fp; 

    if(argc != 2){ 
     perror("Please specify a file"); 
     return 1; 
    } 

    if((fp=fopen(argv[1], "rb")) == 0){ 
     perror("File not found!"); 
     return 2; 
    } 

    int a = fseek(fp, 1000, SEEK_CUR); 

    if(a<0){ 
     printf("fail\n"); 
    } 

    fclose(fp); 

    return 0; 
} 

當我把這稱爲一個空的二進制文件,不會發生錯誤,但是前夕,我希望FSEEK()的返回-1 。有誰知道爲什麼這不會發生?

+0

是的,就是這樣。謝謝! – tomooka 2015-02-08 20:02:39

+1

這是設計。如果您在程序中的'fseek'調用之後調用'fwrite(string,1,strlen(string),fp)'調用,則該文件將在字符串前填充1000個空字符。 – selbie 2015-02-08 20:02:41

回答

1

the documentation of fseek

POSIX允許尋求超越現有文件的末尾。如果在此查找後執行的輸出爲 ,則從間隙讀取的任何數據將返回零 字節。在文件系統支持的地方,這將創建一個稀疏文件。

0

這是正確的。當您搜索文件結束時,fseek不會失敗。