【问题标题】:what's the meaning of "iostat" argument in open statement?开放语句中“iostat”参数的含义是什么?
【发布时间】:2019-01-09 17:13:09
【问题描述】:

我对在打开文件中使用“iostat”参数感到困惑。如前所述,当 open 命令成功时,'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'在这个过程中扮演什么角色呢?

【问题讨论】:

  • 你能指出告诉你iostatierr的文档/教程(等)吗?正如你所拥有的,你对某事感到困惑,但我们很难说出那是什么。

标签: fortran


【解决方案1】:

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 等。

【讨论】:

  • 但是这里是开放的功能吗?对于一个函数,调用时形参由实参赋值。
  • open 不是函数,而是语句。
  • INPUT/OUTPUT 语句一章中的标准参考:“3 输入/输出语句是 BACKSPACE、CLOSE、ENDFILE、FLUSH、INQUIRE、OPEN、PRINT、READ、REWIND、WAIT 和WRITE 语句。”
  • 明白,谢谢。 open 是一个语句,iostat 是一个说明符而不是一个正式的参数。当打开过程成功时,修饰符修饰变量被定义。
  • 鉴于您@Gao 多次使用“正式”,我想我更能理解您的困惑。如果您来自一种背景语言,其中 assignment 是一个可能出现在任何地方的运算符,那么这里可能看起来像是有 assignment。没有:在 Fortran 中,赋值只是一个不同的语句。 this other question 曾经有很多关于 指针赋值 不是运算符的讨论。
猜你喜欢
  • 2021-06-01
  • 1970-01-01
  • 2020-12-12
  • 2017-03-19
  • 2023-04-11
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多