我想打开10,000个文件,文件名从abc25000
开始直到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
端
此代码应该生成从abc24000
开始直到abc35000
的文件,但它会停止大约一半的说法
在test-openFile.f90文件的第17行(unit = 26021,file ='')
Fortran运行时错误:打开文件太多
修复上述代码需要做什么?
答案 0 :(得分:5)
此限制由您的操作系统设置。如果您使用的是Unix / Linux变体,则可以使用ulimit -n
从命令行检查限制,并使用ulimit -n 16384
进行提升。您需要设置大于10000的限制,以允许shell打开的所有其他文件。您可能还需要管理员权限才能执行此操作。
我经常将限制高达2048来运行Fortran程序,但从未高达10000.但是,我回答其他答案,如果可能的话,最好重新构建程序以关闭每个文件,然后再打开下一个文件。
答案 1 :(得分:3)
操作系统往往对资源有限制。通常在例如Linux上,默认情况下每个进程限制1024个文件描述符。您获得的错误消息只是向上传递信息的Fortran运行时库,由于操作系统错误,它无法打开另一个文件。
答案 2 :(得分:3)
您需要一次处理一个文件(或者不超过操作系统限制的小组)。
for each file: open file write close file