fclose()的重点是什么?

时间:2015-11-08 21:22:39

标签: c fclose

从我读到的内容来看,fclose()基本上就像分配了内存时的free(),但我还读到操作系统会为你关闭该文件并冲掉它终止后打开的任何流。我甚至在没有fclose()的情况下测试了一些程序,它们似乎都运行良好。

2 个答案:

答案 0 :(得分:6)

长时间运行的进程(例如数据库或Web浏览器)可能需要在其生命周期内打开许多文件;保持未使用的文件打开浪费资源,并可能阻止其他进程使用这些文件。

此外,fflush刷新写入文件时经常使用的用户空间缓冲区以提高性能;如果进程退出而没有刷新缓冲区(使用fclose / 789540132143 93 3 5434 ),则缓冲区中的数据将丢失。

答案 1 :(得分:1)

大多数现代操作系统也会回收您malloc()编辑的内存,但在适当时使用free()仍然是一种很好的做法。关键是,一旦您不再需要资源,您应该放弃它,因此系统可以重新利用任何后续资源被回收以供其他应用程序(通常是内存)使用。此外,您可以同时保持打开的文件描述符数量有限制。

除此之外,在open()和朋友的情况下还有其他考虑因素,特别是默认情况下,开放文件描述符是在线程和fork()进程边界上继承的。这意味着如果您没有close()文件描述符,您可能会发现子进程可以访问父进程打开的文件。这通常是不受欢迎的,如果您希望特权父进程生成具有较少权限的从属进程,则这是一个微不足道的安全漏洞。

此外,unlink()和朋友的语义是文件内容仅被删除'一旦该文件的最后一个打开文件描述符为close(),再次如此:如果您将文件保持打开的时间超过严格必要的时间,则会导致整个系统中出现次优行为。

最后,在套接字的情况下,close()也对应于与远程对等体断开连接。