【问题标题】:Closing/cleaning up "mixed" file descriptors / sockets关闭/清理“混合”文件描述符/套接字
【发布时间】:2010-09-11 14:30:27
【问题描述】:
当我使用accept() 创建一个套接字并使用fdopen() 从中生成一个文件时,我需要做什么来清理所有内容?我需要在 FILE 上执行 fclose(),在套接字上执行 shutdown() 和 close(),还是只需要 shutdown() 和/或 close() 或 fclose()?如果我不做 fclose(),我必须手动释放() FILE 指针吗?
【问题讨论】:
标签:
c
sockets
io
file-descriptor
【解决方案1】:
来自 man fdopen:
文件描述符没有被复制,当fdopen()创建的流关闭时会关闭
所以我只使用 fclose(),它也会关闭底层文件描述符。我也不知道是否需要shutdown()。
【解决方案3】:
这里有两件事需要清理:FILE 表示的流和套接字表示的文件描述符。您需要先关闭流,然后关闭文件描述符。所以,一般来说你需要fclose()任何FILE对象,然后close()任何文件描述符。
就我个人而言,当我想自己清理时,我从未使用过shutdown(),所以我不能说。
编辑
其他人已经正确指出fdclose() 也会关闭底层文件描述符,并且由于在关闭文件描述符上调用close() 会导致错误,在这种情况下您只需要fdclose()。