代码之家  ›  专栏  ›  技术社区  ›  Erik Öjebo

显式关闭文件句柄,还是让操作系统在UNIX C编程中关闭它们?

  •  3
  • Erik Öjebo  · 技术社区  · 16 年前

    在unix c编程中,在进程退出之前显式关闭文件句柄是一种好的做法,还是让操作系统关闭文件句柄从而避免不必要的代码是一种好的做法?

    这两者中哪一个通常被视为首选方案?

    例子:

    int main (int argc, char* argv[])
    {
        int sd;
        sd = socket(...);
    
        // Snip
    
       close(sd); // Good or bad practice?
       return 0;
    }
    
    7 回复  |  直到 15 年前
        1
  •  10
  •   Douglas Leeder    16 年前

    通常,执行打开和关闭操作的代码不知道进程是否会立即退出,所以最好包括显式代码。

    即使代码位于顶级main()函数上,在代码被重用的情况下仍然是一个好主意。

        2
  •  5
  •   Darron    16 年前

    你自己关闭它们被认为是很好的做法。

    可能是因为这是一个好习惯,以防你的程序在你使用完一个特定的“文件”后一段时间内没有增长和退出。

    例外情况是stdin、stdout和stderr,您的进程没有打开。

    顺便说一下,UNIX术语是“文件描述符”。

        3
  •  2
  •   Alnitak    16 年前

    如果可以的话,最好练习关闭它们。

    如果您的程序发生更改,使文件早晚关闭,则无需记住添加 close() 稍后,当文件I/O被重构时。

        4
  •  2
  •   Binary Worrier    16 年前

    我从大学开始就没有使用过Unix,但是依靠Unix关闭文件句柄,您可以减少代码的使用方式。

    如果您的代码需要移植到另一个平台上,或者如果您的代码需要修改为作为长时间运行的服务来运行,而没有显式的资源管理,那么您将在噩梦中为自己构建,很快就会耗尽资源。

    希望你觉得这有帮助,

        5
  •  1
  •   Joao da Silva    16 年前

    如果程序继续运行,关闭描述符是非常好的做法,但是不再需要描述符。

    同样,它取决于文件描述符类型。例如,关闭()一个套接字将刷新它,如果失败,您可能需要重试。

        6
  •  0
  •   LeleDumbo    16 年前

    我认为它几乎是“通用的”,如果你有开放的操作系统资源,你应该总是在你结束使用后立即关闭它们。这样,您就可以释放这些资源,以便其他应用程序可以使用它们。

    通过依赖操作系统来关闭你的句柄,当他认为你不再需要它们时,他只会关闭它们(例如应用程序退出)。您应该始终释放系统资源。

        7
  •  0
  •   user25148    16 年前

    关闭任何打开的文件是最重要的,因为这样可以发现I/O错误并向用户报告。出于同样的原因,如果写入stdout和stderr,那么刷新(或者可能关闭)它们可能是个好主意。