2016-05-15 48 views
1

我正在使用perl脚本,我需要检查不同服务器上的多个远程文件的内容。 里面我的循环,我得到这个:perl - 安全地打开文件

my $file = "\\\\$myserver\\c\$\\$mydirectory\\$myfile"; 
if (open (FILE, "<", $file)) 
{ 
    # do some work 
    close (FILE); 
} 

这是工作的罚款,如果大部分的时间,但今天我有一个非常具体的问题。其中一台服务器的Windows目录已被删除,无法响应。 我甚至无法杀死运行脚本的终端。 于是我开始了一种有超时在网上搜索,但经过长时间的搜寻后,我发现这一点:

上MSWin32阻塞I/O

报警(2)不中断阻塞I/O在MSWin32上,所以'超时'也不会这样做。

由于几乎所有的解决方案都使用函数报警,我不知道如何防止我的脚本形式再次陷入困境。

ps:我试图使用系统调用来打印文件,但我得到同样的问题,甚至直接形成一个CMD,而不是脚本。

回答

0

我相信打开文件的corect语法是:

my $file = "\\\\$myserver\\c\$\\$mydirectory\\$myfile"; 
open my $fh, '<', $file 
    or die "Cannot open $file for reading: $!"; 
+0

我不知道,实际上帮助的问题。 OP用来测试打开工作的方法很好 - 它只是阻塞,这也不起作用。 – Sobrique

+0

我同意你这是一个更优雅的方式来打开文件,但它与我的问题没有关系 –