代码之家  ›  专栏  ›  技术社区  ›  jkramer

关闭/清除“混合”文件描述符/套接字

  •  6
  • jkramer  · 技术社区  · 16 年前

    当我使用accept()创建一个套接字并使用fdopen()从中生成一个文件时,我需要做什么来清理所有内容?我需要对文件执行fclose()操作,对套接字执行shutdown()和close()操作,还是只执行shutdown()和/或close()或fclose()操作?如果不执行fclose(),是否必须手动释放()文件指针?

    3 回复  |  直到 16 年前
        1
  •  5
  •   tsg    16 年前

    从Man FDopen:

    文件描述符不是dup_ed,当fdopen()创建的流关闭时,文件描述符将关闭。

    所以我只使用fclose(),它也关闭了底层的文件描述符。我也不知道是否需要shutdown()。

        2
  •  3
  •   Steve Jessop    16 年前

    http://opengroup.org/onlinepubs/007908775/xsh/fclose.html

    fclose()函数将执行 文件描述符上的close(),即 与指向的流关联 逐流。

    如果您已经将套接字包装在流中,那么shutdown()可能不再有意义,至少在不首先刷新流的情况下是没有意义的。但我不会发誓,因为我不知道在您想关闭()的地方没有任何用处,而不仅仅是关闭()。

        3
  •  -1
  •   freespace    16 年前

    这里有两件事需要清理:由 FILE 以及由套接字表示的文件描述符。您需要先关闭流,然后关闭文件描述符。所以,一般来说,你需要 fclose() 任何 文件 对象,然后 close() 任何文件描述符。

    我个人从来没有用过 shutdown() 当我想清理自己之后,我不能说。

    编辑

    其他人正确地指出 fdclose() 也将关闭基础文件描述符,并且由于调用 关闭() 在关闭文件时,描述符将导致错误,在这种情况下,您只需要 FDCULL() .