Sun Studio 12:Fortran 编程指南

2.1.1 访问命名文件

OPEN 语句的 FILE= 说明符在运行时建立逻辑单元到命名物理文件的关联。该文件可以是预先就有的,也可以由程序创建。

OPEN 语句中的 FILE= 说明符可以指定一个简单文件名 (FILE=’myfile.out’),也可以指定一个前面带有绝对或相对目录路径的文件名 (FILE=’../Amber/Qproj/myfile.out’)。另外,说明符还可以是字符常量、变量或字符表达式。

可以使用库例程将命令行参数和环境变量以字符变量形式送入程序,用作 OPEN 语句中的文件名。

以下示例 (GetFilNam.f) 展示了一种由键入的名称来构建绝对路径文件名的方法。程序使用库例程 GETENVLNBLNKGETCWD 返回 $HOME 环境变量的值,查找字符串中最后的非空格字符,确定当前工作目录:


      CHARACTER F*128, FN*128, FULLNAME*128
      PRINT*, ’ENTER FILE NAME:’
      READ *, F
      FN = FULLNAME( F )
      PRINT *, ’PATH IS: ’,FN
      END

      CHARACTER*128 FUNCTION FULLNAME( NAME )
      CHARACTER NAME*(*), PREFIX*128
C          This assumes C shell.
C           Leave absolute path names unchanged.
C           If name starts with ’~/’, replace tilde with home
C           directory; otherwise prefix relative path name with
C           path to current directory.
      IF ( NAME(1:1) .EQ. ’/’ ) THEN
            FULLNAME = NAME
      ELSE IF ( NAME(1:2) .EQ. ’~/’ ) THEN
            CALL GETENV( ’HOME’, PREFIX )
            FULLNAME = PREFIX(:LNBLNK(PREFIX)) //
     1                     NAME(2:LNBLNK(NAME))
      ELSE
            CALL GETCWD( PREFIX )
            FULLNAME = PREFIX(:LNBLNK(PREFIX)) //
     1                     ’/’ // NAME(:LNBLNK(NAME))
      ENDIF
      RETURN
      END

编译并运行 GetFilNam.f,结果如下:


demo% pwd
/home/users/auser/subdir
demo% f95 -o getfil GetFilNam.f
demo% getfil
 ENTER FILE NAME:
getfil
 PATH IS: /home/users/auser/subdir/atest.f

demo%

2.1.4 向程序传递文件名中对这些例程进行了详细的介绍。有关详细信息,请参见 getarg(3F)、getcwd(3F) 和 getenv(3F) 的相应手册页条目;这些内容以及其他有用的库例程在《Fortran 库参考》中也有介绍。