开放语句中“ iostat”参数的含义是什么?

时间:2019-01-09 17:13:09

标签: fortran

我对打开文件中使用“ iostat”参数感到困惑。可以这么说,当打开命令成功时,“ iostat”的值为0。

open(unit=99, file='vel_zcor22.txt', status='old', iostat=ierr, err=100)
100 if(ierr .ne. 0) then
    print*, 'open file error'
endif   
print*, ierr 

为什么不使用“ iostat”而不是“ ierr”来表示状态。据我对赋值运算符的理解,“ ierr”将其值传递给“ iostat”。那么“ ierr”在此过程中扮演什么角色?

1 个答案:

答案 0 :(得分:2)

open语句中,iostat=ierr使用iostat=作为说明符。这不是分配,而是将ierr的值传递给变量iostat

就像在子例程或函数引用中使用关键字(其中call sub(a=x)将实际参数x与虚拟参数a关联时)一样,发生的事情更多:

  

使用变量ierr存储语句的结果状态。

因此,当“ iostat的值为0”时,真正发生的是定义了变量ierr

您可以改用任何变量名来代替ierr,通常通常使用iostat

open(..., iostat=iostat, ...)

同样,您看到的其他部分也不是分配。那就是:

open(unit=99, file='vel_zcor22.txt', status='old', iostat=ierr, err=100)

可能看起来像是作业,但仍在说:

  

在单元99上打开,状态为'old'的文件,如果有错误,则将控制权传递给标记为100的语句。

它没有将变量unit设置为99,依此类推。