为什么我只能在Windows上用Tie :: File打开2045个文件?

我有以下代码试图将数组绑定到文件。 除了当我运行这个代码时,它只创build2045个文件。 这里有什么问题?

#!/usr/bin/perl use Tie::File; for (my $i = 0; $i < 10000; $i++) { @files{$i} = (); tie @{$files{$i}}, 'Tie::File', "files//tiefile$i"; } 

编辑:我在窗户上

您正在累积打开的文件句柄(请参阅ulimit -nsetrlimit RLIMIT_NOFILE / RLIMIT_OFILE ),最终打开2048个打开的文件描述符限制(2045 + stdin + stdout + stderr

在Windows下,你将不得不重写你的应用程序,这样它一次最多可以打开2048个文件句柄,因为2048的限制是MSVC的stdio硬限制(不能修改)。

在Linux机器上,进入/etc/security/limits.conf并添加或修改这些行

 * soft nofile 10003 * hard nofile 10003 

这将增加每个进程可以打开的文件数量到10003(记住,你总是以三个开始:stdin,stdout和stderr开始)。

根据你的意见,这听起来像你使用的Win32机器。 我无法找到增加每个进程的打开文件数量的方法,但是我可能会强调,可以通过fork (这实际上是在Win32上进行线程化)来处理这个问题。