我修改了另一个程序员的Perl脚本,用它来输出日志。 perl脚本遍历文件,对于它经过的每个文件,我打开()日志,写入/打印到它然后关闭()它。这种情况发生了很多次。我这样做是为了确保我不会丢失任何数据,如果说Perl脚本挂起(它最终开始这样做,我不知道足够修复它)。因此,我没有在该循环中重复open()和close()的好方法。
我的主要问题是:Perl脚本仅供个人使用,因此速度降低不是问题。但是有没有其他不好的事情可以跟随这种可能不正确的开/关使用?这可能听起来像一个愚蠢的问题,但是这可能会让我的硬盘更快地磨损,或者我误解了文件处理的工作方式?
提前致谢。
答案 0 :(得分:12)
正如其他人所提到的,除了表现之外没有任何问题(可以说是代码的清洁度)。
但是,如果您只是担心“如果Perl挂断”会丢失数据“,只需在文件句柄上设置autoflush:
use IO::Handle;
open HANDLE, '>log.txt'
or die "Unable to open log.txt for writing: $!";
HANDLE->autoflush(1);
现在每个print
到HANDLE
都会自动刷新。无需保持开启和关闭。
在perldoc man page中搜索“autoflush”以获取更多信息。
答案 1 :(得分:4)
理论上,通常最好尽快打开和关闭连接,文件也不例外。您将遇到的两件事是文件锁定和性能。
如果其他人同时访问您的文件,则可能会发生文件锁定。
正如您所提到的,性能不是一个大问题。
我们不是在谈论等待开放/关闭操作的生命周期......它通常是高并发性或数十万次操作引人注意的。
答案 2 :(得分:2)
操作系统确定硬盘驱动器访问权限,因此您应该没问题。如果你需要打开()并关闭()很多文件,那就没关系。唯一可能发生的事情是,如果你的脚本挂起(由于一些奇怪的原因),而它有来自open()的文件指针,如果在手动编辑后恢复它会导致数据丢失(但这是一种非常罕见的情况)。此外,如果您的脚本崩溃,那么描述符无论如何都会被释放,因此我无法告诉您。