当我使用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()

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top