fseek不适用于空文件

时间:2015-02-08 19:56:48

标签: c 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返回。有谁知道为什么这不会发生?

2 个答案:

答案 0 :(得分:1)

来自the documentation of fseek

  

POSIX允许在现有文件末尾之外进行搜索。如果输出是   在此搜索之后执行,来自间隙的任何读取将返回零   字节。在文件系统支持的情况下,这将创建一个稀疏文件。

答案 1 :(得分:0)

这是正确的。当你寻找过去的文件结束时,fseek不会失败。