【问题标题】:Properly close a file with both a file descriptor and file pointer [duplicate]使用文件描述符和文件指针正确关闭文件[重复]
【发布时间】:2018-03-14 15:54:53
【问题描述】:

对于带有fprintf() 的格式化写入,我使用从mkstemp() (see this link) 创建的文件描述符获得的FILE 指针:

fd = mkstemp(tmpName);

FILE *fp = fdopen(fd, "w");
fprintf(fp, "#EXTM3U\n");

关闭文件的正确程序是什么?

fclose(fp) // only?

fclose(fp); // both?
close(fd);

close(fd); // only?

【问题讨论】:

标签: c posix


【解决方案1】:

来自the docs

fdopen() 函数将流与现有文件相关联 描述符,fd

[...]

文件描述符没有被复制,并且在流时将被关闭 fdopen() 创建的已关闭。

另请注意:

流的模式(值“r”,“r+”之一, "w", "w+", "a", "a+") 必须与文件的模式兼容 描述符。

【讨论】:

    【解决方案2】:

    fdopen 的手册页指定以下内容:

    文件描述符没有被复制,并且会在 fdopen() 创建的流关闭时关闭。

    fclose 的手册页支持这一点:

    fclose() 函数应在与 stream 指向的流相关联的文件描述符上执行等效的 close()

    所以,fclose 就足够了……

    【讨论】:

    猜你喜欢
    • 2017-09-05
    • 2014-04-07
    • 2010-12-08
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2020-09-06
    • 2016-03-07
    相关资源
    最近更新 更多