【问题标题】:Explicitly close file handles or let the OS close them in Unix C programming?显式关闭文件句柄还是让操作系统在 Unix C 编程中关闭它们?
【发布时间】:2009-01-19 14:44:51
【问题描述】:

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

这两者中的哪一个通常被认为是首选?

例子:

int main (int argc, char* argv[])
{
    int sd;
    sd = socket(...);

    // Snip

   close(sd); // Good or bad practice?
   return 0;
}

【问题讨论】:

    标签: c unix filehandle


    【解决方案1】:

    通常,执行打开和关闭的代码不知道进程是否会立即退出 - 因此最好包含显式代码。

    即使代码驻留在顶级 main() 函数中,万一代码被重复使用,它仍然是一个好主意。

    【讨论】:

      【解决方案2】:

      最好自己关闭它们。

      可能是因为这是一个好习惯,以防在您使用完特定“文件”后的一段时间内您的程序增长并且退出不发生。

      您的进程未打开的 stdin、stdout 和 stderr 除外。

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

      【讨论】:

        【解决方案3】:

        如果可以的话,关闭它们绝对是个好习惯。

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

        【讨论】:

          【解决方案4】:

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

          如果您的代码需要移植到另一个平台,或者如果您的代码需要修改以作为长期运行的服务运行,而没有明确的资源管理,您很快就会用完资源。

          希望对您有所帮助,

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

                【解决方案7】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-10-31
                  • 2011-08-26
                  • 2013-08-18
                  • 1970-01-01
                  • 2017-10-05
                  • 2010-11-13
                  • 2018-10-19
                  • 1970-01-01
                  相关资源
                  最近更新 更多