关闭/清理“混合”文件描述符/套接字
-
01-07-2019 - |
题
当我使用accept()创建套接字并使用fdopen()从中创建一个FILE时,我需要做些什么来清理所有内容?我需要在套接字上的FILE,shutdown()和close()上执行fclose(),还是只需要shutdown()和/或close()或fclose()?如果我不做fclose(),我是否必须手动释放()FILE指针?
解决方案
来自man fdopen:
文件描述符不是重复的,当fdopen()创建的流关闭时将关闭文件描述符
所以我只使用fclose(),它也会关闭底层文件描述符。我不知道是否需要shutdown()。
其他提示
来自 http://opengroup.org/onlinepubs/007908775/xsh/fclose。 HTML
fclose()函数将执行a close()在文件描述符上 与指向的流相关联 按流。
如果你已经将你的套接字包装在一个流中,那么shutdown()可能就没有意义了,至少在没有先刷新流的情况下也是如此。但我不会发誓,因为我不知道你想要关闭()而不是关闭()而没有用处。
您需要清理两件事: FILE
表示的流和套接字表示的文件描述符。您需要先关闭流,然后关闭文件描述符。因此,通常您需要 fclose()
任何 FILE
对象,然后 close()
任何文件描述符。
我个人以后从未使用 shutdown()
,因为我想在自己之后进行清理,所以我不能说。
修改
其他人已经正确地指出 fdclose()
也将关闭底层文件描述符,并且因为在关闭文件描述符上调用 close()
会导致错误,在这种情况下,您只需要 fdclose()
。
不隶属于 StackOverflow