为啥 Inquire pos 在 Fortran 90 中返回 0

Posted

技术标签:

【中文标题】为啥 Inquire pos 在 Fortran 90 中返回 0【英文标题】:why does Inquire pos returns 0 in Fortran 90为什么 Inquire pos 在 Fortran 90 中返回 0 【发布时间】:2014-05-08 16:38:12 【问题描述】:

我在 Fortran 90 中读取一个二进制文件,直接访问,我试图找出指针位置。为此我使用:

inquire(unitvector, pos=cur_pos)

但是当我打印cur_pos 时,它始终为0,即使在我阅读了大量文件之后也是如此。为什么是0?

编译我使用:

$ ifort -warn all -traceback -free util.F fold2Bloch.f90 -o fold2Bloch

【问题讨论】:

pos= 不是 Fortran 90 - 这是问题的一部分。 【参考方案1】:

用于POS= 说明符的变量仅用于与 访问连接的文件,而不是选择的直接 访问。在这种情况下,0 是可能的结果。

对于直接访问,该位置可能并没有太大的普遍价值:这种连接点是随机访问。

来自draft standard,第 9.10.2.22 节(我的重点):

POS= 说明符中的 scalar-int-variable 分配了紧跟为流访问而连接的文件的当前位置之后的文件存储单元的编号。 [..] 如果 [..] 文件未连接以进行流访问 [..] 变量未定义

【讨论】:

这确实可以解释。你知道另一种方法来查看你的路有多远吗? 如果您进行直接访问,那么请计算您已阅读的记录数并找出您总共将阅读的记录数? 嗯,这是个主意。但是,当我使用 recl 查询记录长度时,我得到 540。我做了一些阅读,并且在直接访问中,所有记录长度必须相同。现在那个 540 是什么意思?字节,位? 它是可能字节,但它将是540*FILE_STORAGE_SIZE位。请参阅编译器的文档。 谢谢,这很有帮助。

以上是关于为啥 Inquire pos 在 Fortran 90 中返回 0的主要内容,如果未能解决你的问题,请参考以下文章

inquire和enquire的的 区别

inquire 和enquire 的区别

为啥在 Fortran 中使用命令 PRINT 会覆盖输入文件?

为啥 Julia 代码性能比 Fortran 低很多?

请看看则个fortran结合openmp并行程序,为啥老出错?

为啥 GDB 认为我的 Fortran 字符串是 ~4GiB