如何在C中正确关闭文件

问题描述 投票:0回答:2

我通常从stdin或文件名中读取:

FILE *open_file(char *filename, FILE *fallback, char *mode)
{
    FILE *fp = fallback;

    if (filename != NULL) {
        if ((fp = fopen(filename, mode)) == NULL) {
            fprintf(stderr, "Error: cannot open '%s'!\n", filename);
            exit(ERROR_CANNOT_READ_FILE);
        }
    }

    if (fp == NULL) {
        fprintf(stderr, "Error: file error!\n");
        exit(ERROR_CANNOT_READ_FILE);
    }
    return fp;
}

int main(int argc, char* argv[]) {
    FILE *fp = open_file(argc > 1 ? argv[1] : NULL, stdin, "r");

    // some stuff...

    if(!fclose(fp)) {
       exit(EXIT_FAILURE);
    }        
}

在此示例中,fclose可能有问题。我无法关闭stdinstdout。如何正确有条件地关闭fp

我必须关闭fp吗?

c file-io
2个回答
0
投票

这里是一个很好的答案:

https://stackoverflow.com/a/5925575/13032978

我不会关闭stdin或stdout,因为它也会在环境上关闭它们...


0
投票

如果文件成功关闭但在您的代码中,fclose()返回0

 if(!fclose(fp)) {
   exit(EXIT_FAILURE);
} 

如果fclose()成功关闭文件,则为true,因此您可以将其更改为

 if(fclose(fp)) {
   exit(EXIT_FAILURE);
} 

 if(fclose(fp)!=0){
   exit(EXIT_FAILURE);
} 
© www.soinside.com 2019 - 2024. All rights reserved.