当我使用 accept() 创建一个套接字并使用 fdopen() 从中创建一个 FILE 时,我需要做什么来清理所有内容?我需要在 FILE 上执行 fclose(),在套接字上执行 shutdown() 和 close(),还是只需要 shutdown() 和/或 close() 或 fclose()?如果我不执行 fclose(),我是否必须手动释放() FILE 指针?
jkramer
问问题
3330 次
3 回答
5
来自 man fdopen:
文件描述符没有被复制,并且会在 fdopen() 创建的流关闭时关闭
所以我只会使用 fclose(),它也会关闭底层文件描述符。我也不知道是否需要 shutdown()。
于 2008-09-20T12:48:51.597 回答
3
来自http://opengroup.org/onlinepubs/007908775/xsh/fclose.html
fclose() 函数将对与 stream 指向的流相关联的文件描述符执行 close()。
如果您已将套接字包装在流中,则 shutdown() 可能不再有意义,至少在不先刷新流的情况下不会。但我不会发誓,因为我不知道你想要关闭()而不是关闭()没有任何用途。
于 2008-09-20T12:53:58.200 回答
-1
这里有两件事需要清理:由套接字表示的流FILE
和由套接字表示的文件描述符。您需要先关闭流,然后关闭文件描述符。所以,一般来说,你需要fclose()
任何FILE
对象,然后是close()
任何文件描述符。
就我个人而言,当我想自己清理时,我从来没有使用过shutdown()
,所以我不能说。
编辑
其他人已经正确指出这fdclose()
也会关闭底层文件描述符,并且由于调用close()
关闭文件描述符会导致错误,在这种情况下你只需要fdclose()
.
于 2008-09-20T12:44:59.577 回答