OPEN 语句的 FILE= 说明符在运行时建立逻辑单元到命名物理文件的关联。该文件可以是预先就有的,也可以由程序创建。
OPEN 语句中的 FILE= 说明符可以指定一个简单文件名 (FILE=’myfile.out’),也可以指定一个前面带有绝对或相对目录路径的文件名 (FILE=’../Amber/Qproj/myfile.out’)。另外,说明符还可以是字符常量、变量或字符表达式。
可以使用库例程将命令行参数和环境变量以字符变量形式送入程序,用作 OPEN 语句中的文件名。
以下示例 (GetFilNam.f) 展示了一种由键入的名称来构建绝对路径文件名的方法。程序使用库例程 GETENV、LNBLNK 和 GETCWD 返回 $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 库参考》中也有介绍。