Sun Studio 12:Fortran 编程指南

2.1.4 向程序传递文件名

文件系统没有任何自动工具可将 Fortran 程序中的逻辑单元号与物理文件相关联。

但是,有几种令人满意的方式可将文件名传递给 Fortran 程序。

2.1.4.1 通过运行时参数和 GETARG

可以使用库例程 getarg(3F) 在运行时将命令行参数读入字符变量。参数会被解释为文件名并在 OPEN 语句的 FILE= 说明符中使用:


demo% cat testarg.f
         CHARACTER outfile*40
C  Get first arg as output file name for unit 51
         CALL getarg(1,outfile)
         OPEN(51,FILE=outfile)
         WRITE(51,*) ’Writing to file: ’, outfile
         END
demo% f95 -o tstarg testarg.f
demo% tstarg AnyFileName
demo% cat AnyFileName
 Writing to file: AnyFileName
demo%

2.1.4.2 通过环境变量和 GETENV

同样,可以使用库例程 getenv(3F) 在运行时将任何环境变量的值读入字符变量,该字符变量随后被解释为文件名:


demo% cat testenv.f
         CHARACTER outfile*40
C  Get $OUTFILE as output file name for unit 51
         CALL getenv(’OUTFILE’,outfile)
         OPEN(51,FILE=outfile)
         WRITE(51,*) ’Writing to file: ’, outfile
         END
demo% f95 -o tstenv testenv.f
demo% setenv OUTFILE EnvFileName
demo% tstenv
demo% cat EnvFileName
 Writing to file: EnvFileName
demo%

使用 getarggetenv 时,应该注意前导或尾随的空格。(Fortran 95 程序可以使用内函数 TRIM 或更早的 FORTRAN 77 库例程 LNBLNK())在本章开头的示例中,可以随 FULLNAME 函数的代码行编写更加灵活的代码来接受相对路径名。

2.1.4.3 命令行 I/O 重定向和管道

将物理文件与程序的逻辑单元号相关联的另一种方式是重定向或管道输送预连接的标准 I/O 文件。重定向或管道在运行时执行命令中使用。

采用这种方式,读取标准输入(单元 5)和写入标准输出(单元 6)或标准错误(单元 0)的程序可以通过重定向(在命令行中使用 <、>、>>、>&、|、|&、2>、2>&1),读取或写入其他任何命名文件。

参见下表:

表 2–1 csh/sh/ksh 命令行重定向和管道

操作 

使用 C Shell 

使用 Bourne 或 Korn Shell 

标准输入-从 mydata 读取 

myprog < mydata

myprog < mydata

标准输出-写入(覆写)myoutput 

myprog > myoutput

myprog > myoutput

标准输出-写入/追加至 myoutput 

myprog >> myoutput

myprog >> myoutput

将标准错误重定向至文件 

myprog >& errorfile

myprog 2> errorfile

将标准输出通过管道输送至另一程序的输入 

myprog1 | myprog2

myprog1 | myprog2

将标准错误和输出通过管道输送至另一程序 

myprog1 |& myprog2

myprog1 2>&1 | myprog2

有关命令行重定向和管道的详细信息,请参见 cshkshsh 手册页。