在Erlang中,当对资源的所有引用都消失时,是否可以自动调用清理函数?例如,如果从未调用过file:close/1,通过调用file:open/2打开的本机文件句柄会被关闭吗?如果这是可能的,它是如何完成的?如果不可能,有没有Erlang习惯用法可以让这样的资源泄漏不成问题?
发布于 2012-02-16 23:46:49
从file documentation
IoDevice实际上是处理文件的进程的pid。此进程链接到最初打开该文件的进程。如果IoDevice所链接的任何进程终止,该文件将被关闭,进程本身也将终止。从该调用返回的IoDevice可以用作IO函数的参数(参见io(3))。
因此,如果打开该文件的进程终止,该文件将自动关闭。
如果您使用的是动态口令,并且希望绝对确保在进程终止时文件已关闭,请在terminate函数中添加file:close。当然,您的gen_*必须连接到主控引擎。
https://stackoverflow.com/questions/9314171
复制相似问题