2009-01-19 47 views
3

在Unix C编程中,在进程退出之前显式关闭文件句柄是否被认为是很好的做法,或者让操作系统关闭文件句柄并避免不必要的代码是一种好习惯?显式关闭文件句柄或让操作系统在Unix C编程中关闭它们?

这两种情况中的哪一种通常被认为是首选的选择?

例子:

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

    // Snip 

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

回答

10

一般情况下是在做开启和关闭不知道该进程是否要立即退出代码 - 所以这是最好的,包括明确的代码。

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

1

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

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

5

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

可能是因为它是一种很好的习惯,以防您的程序增长并且在完成使用特定“文件”后的一段时间内不会出现退出。

例外是您的进程未打开的stdin,stdout和stderr。

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

2

绝对好的做法,如果可以关闭他们。

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

2

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

如果您的代码需要移植到另一个平台,或者您的代码需要修改以作为长时间运行的服务运行,而没有明确的资源管理,您将很快运行,为自己构建恶梦资源不足。

希望对您有所帮助,

0

我认为它几乎是“通用”的,如果你有OS资源打开,你应该总是关闭它们,当你使用它们完成后。这样你释放这些资源,以便其他应用程序可以使用它们。

通过依靠操作系统来关闭你的手柄,他只是在他认为你不再需要它们时关闭它们(例如应用程序退出)。你应该总是释放系统资源。

0

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

相关问题