【问题标题】:Meaning of OPEN(..., SHARED) in FortranFortran 中 OPEN(..., SHARED) 的含义
【发布时间】:2017-11-18 00:05:18
【问题描述】:

我正在将旧版 Fortran 控制台应用程序移植到 C# 并遇到以下语句:

    OPEN(UNIT=12,FILE = bufProgress,STATUS='UNKNOWN'
    1 ,SHARED,ERR = 9300)

(按原样缩进。)SHARED 在这种情况下是什么意思? (由于1 用于行继续,它是OPEN 语句的一部分,对吧?)

我发现的东西:

  • 整个程序(包括一个 +7k 行文件)中没有同名的变量。
  • 这个程序是在几十年前使用“Digital Visual Fortran 6.0 Professional”编译的。我相信英特尔的 Fortran 编译器在过去十年中一直在使用,但不确定。
  • 由缓冲区的内容指定的文件(当程序作为其“父”多平台系统的一部分运行时)被此控制台应用程序写入并被另一个进程读取。
  • 在该语句上方有一个注释掉的语句,如下所示:

    c   OPEN(UNIT=12,FILE='progress.tmp',STATUS='UNKNOWN'
    c   1 ,SHARE='DENYRD',ERR = 9300)
    

    似乎SHARE='DENYRD' 曾经在某一时刻有类似的语义?

  • OPEN 的上下文中,我没有在网上找到任何关于SHAREDSHARE 的信息。

【问题讨论】:

  • 你使用哪个编译器?
  • 你在网上搜索时错过了h41379.www4.hpe.com/doc/82final/6443/…吗?
  • @VladimirF 不幸的是,没有。我已经通过 Code::Blocks 在此清单上尝试了 gfortran,但我无法访问该程序在过去几年编译时所依赖的 IMSL 库。 gfortran 发出大量语法错误。如果我将这些添加到问题中会有帮助吗?
  • @VladimirF 感谢您提供 hpe.com 链接,它看起来很有希望!我确实错过了。不过,直到今天晚些时候,我才能彻底审查它。我会尽快更新。

标签: fortran


【解决方案1】:

对我来说最好的参考资料:

试试这个网站以获得 FORTRAN 参考:https://software.intel.com/en-us/intel-fortran-compiler-17.0-user-and-reference-guide

共享: https://software.intel.com/en-us/node/678862

SHARED 说明符表示文件是为共享而连接的 由多个同时执行的程序访问。

似乎可以防止记录锁定以提高性能,并且可能不会在当前版本的 FORTRAN 中使用。

对于 SHARE=[类型] https://software.intel.com/en-us/node/678861

'DENYRD' 表示拒绝读取模式。没有进程可以打开文件 读取权限。

其他 FORTRAN 说明可在英特尔网站上找到。

【讨论】:

  • 正如其他人所暗示的那样,这种语法可能可以追溯到 Fortran 具有等效功能的标准规范之前的时间。默认情况下,打开的文件将被打开程序锁定,以便其他进程无法访问它,通常是为了防止意外写入文件。您需要将其翻译成标准语法才能使用当前的编译器。
  • Fortran 标准不包括指定文件共享的语法 - SHARED 和 SHARE 是扩展名。英特尔 Fortran 为此支持两种不同的语法,一种是 DEC 继承,一种是 Microsoft 继承。您也许可以只删除该选项,尽管行为.then 将取决于实现和平台。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 2017-08-12
相关资源
最近更新 更多