4

我想打开 10,000 个文件名从abc25000until开始的文件abc35000,并将一些信息复制到每个文件中。我写的代码如下:

PROGRAM puppy
IMPLICIT NONE

integer :: i
CHARACTER(len=3) :: n1
CHARACTER(len=5) :: cnum
CHARACTER(len=8) :: n2

loop1: do i = 25000 ,35000  !in one frame

  n1='abc'
  write(cnum,'(i5)') i
  n2=n1//cnum
  print*, n2
  open(unit=i ,file=n2)

enddo loop1

结尾

这段代码应该从abc24000until开始生成文件,abc35000但它停止了大约一半说

在文件 test-openFile.f90 (unit = 26021, file = '') 的第 17 行

Fortran 运行时错误:打开的文件太多

我需要做什么来修复上面的代码?

4

3 回答 3

6

此限制由您的操作系统设置。如果您使用的是 Unix/Linux 变体,您可以从命令行使用 来检查限制ulimit -n,并使用ulimit -n 16384. 您需要设置大于 10000 的限制,以允许 shell 将打开的所有其他文件。您可能还需要管理员权限才能执行此操作。

我经常将运行 Fortran 程序的限制提高到 2048,但从不超过 10000。但是,我回应其他答案,如果可能的话,最好重组程序以在打开下一个文件之前关闭每个文件。

于 2011-09-30T15:23:07.187 回答
3

您需要一次处理一个文件(或在不超过操作系统限制的小组中)。

对于每个文件:
  打开文件
  写
  关闭文件
于 2011-09-30T14:16:28.707 回答
3

操作系统往往对资源有限制。例如,通常在 Linux 上,默认情况下每个进程限制为 1024 个文件描述符。您收到的错误消息只是 Fortran 运行时库向上传递信息,即由于操作系统错误而无法打开另一个文件。

于 2011-09-30T14:11:06.473 回答