在Unix C编程中,在进程退出之前显式关闭文件句柄是否被认为是一种好习惯,或者让操作系统关闭文件句柄从而避免不必要的代码是一种好的做法?
通常会将两者中的哪一个视为首选替代方案?
示例:
int main (int argc, char* argv[])
{
int sd;
sd = socket(...);
// Snip
close(sd); // Good or bad practice?
return 0;
}
答案 0 :(得分:10)
通常,执行打开和关闭的代码不知道进程是否会立即退出 - 因此最好包含显式代码。
即使代码驻留在顶级main()函数中,如果代码被重复使用仍然是一个好主意。
答案 1 :(得分:5)
自己关闭它们被认为是一种好习惯。
可能是因为这是一个好习惯,如果您的程序增长并且在使用完特定“文件”后一段时间内没有退出。
例外是stdin,stdout和stderr,你的进程没有打开。
顺便说一句,UNIX术语是“文件描述符”。
答案 2 :(得分:2)
如果可以,最好关闭它们。
如果你的程序发生了变化,文件很快就会关闭,你不需要记得在文件I / O被重构后再添加close()
。
答案 3 :(得分:2)
我从大学开始就没有使用过unix,但依靠unix关闭文件句柄,你减少了代码的使用方式。
如果您的代码需要移植到另一个平台,或者如果您的代码需要修改为长时间运行的服务,并且没有明确的资源管理,您很快将耗尽自己的噩梦资源。
希望您觉得这很有帮助,
答案 4 :(得分:1)
如果您的程序继续运行但不再需要描述符,那么关闭描述符是非常好的做法。
然后,它取决于文件描述符类型。例如,关闭()套接字将刷新它,如果失败,您可能需要重试。
答案 5 :(得分:0)
我认为它几乎是“通用的”,如果你打开了操作系统资源,你应该在完成它们之后立即关闭它们。这样您就可以释放这些资源,以便其他应用程序可以使用它们。
依靠操作系统关闭你的手柄,他只是在他认为你不再需要它们时关闭它们(例如app退出)。您应该始终释放系统资源。
答案 6 :(得分:0)
关闭您打开的任何文件被认为是好的绝对最重要的原因是,您可以找到有关I / O错误并将其报告给用户的信息。出于同样的原因,如果你写它们,刷新(或可能关闭)stdout和stderr可能是个好主意。