【问题标题】:fseek does not work with empty file [duplicate]fseek 不适用于空文件[重复]
【发布时间】:2015-02-08 19:56:47
【问题描述】:

我有以下代码:

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。有谁知道为什么这没有发生?

【问题讨论】:

  • 是的,就是这样。谢谢!
  • 这是设计使然。如果您在程序中调用 fseek 之后调用 fwrite(string, 1, strlen(string), fp) 调用,则文件将在字符串前填充 1000 个空字符。

标签: c fseek


【解决方案1】:

来自the documentation of fseek

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

【讨论】:

    【解决方案2】:

    没错。 fseek 在查找文件末尾时不会失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 2014-02-17
      • 2019-01-12
      • 1970-01-01
      相关资源
      最近更新 更多