使用文件描述符和文件指针正确关闭文件

时间:2017-10-03 12:38:46

标签: c posix

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

fd = mkstemp(tmpName);

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

关闭文件的正确步骤是什么?

fclose(fp) // only?

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

close(fd); // only?

2 个答案:

答案 0 :(得分:2)

来自the docs

  

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

     

[...]

     

在          文件描述符不是重复的,并且在流时将被关闭          由 fdopen()创建的关闭。

请注意:

  

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

答案 1 :(得分:0)

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

  

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

fclose的手册页支持:

  

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

所以,fclose就够了......