【问题标题】:Should the socketpair ends be closed before application exits?在应用程序退出之前应该关闭套接字对吗?
【发布时间】:2017-09-01 03:26:54
【问题描述】:
我有一个应用程序,想知道我在使用 valgrind -track-fds=yes ./app 时是否泄漏了文件描述符
我明白了:
==18807== FILE DESCRIPTORS: 4 open at exit.
==18807== Open AF_UNIX socket 20: <unknown>
这是否被认为是文件描述符泄漏?当应用程序终止或Linux内核处理它时,一个关闭的socketPair应该结束吗?
【问题讨论】:
标签:
c
valgrind
socketpair
【解决方案1】:
通常只有无限资源损失被认为是泄漏。
如果您在循环中打开一个文件并且从不关闭它,那么您就有了泄漏。泄漏很糟糕,因为您的程序将耗尽它泄漏的任何资源。
如果您打开一个文件一次,这并不算泄漏,尤其是当您在程序的最后需要它时。无论如何它都会被内核自动关闭。
即使只是为了保持您的 valgrind 日志干净,关闭此类文件也是一个好习惯。
【解决方案2】:
不,这不是因为文件会自动关闭,而是在退出之前fclose 打开的文件是一个好习惯。