文件系统没有任何自动工具可将 Fortran 程序中的逻辑单元号与物理文件相关联。
但是,有几种令人满意的方式可将文件名传递给 Fortran 程序。
可以使用库例程 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% |
同样,可以使用库例程 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% |
使用 getarg 或 getenv 时,应该注意前导或尾随的空格。(Fortran 95 程序可以使用内函数 TRIM 或更早的 FORTRAN 77 库例程 LNBLNK())在本章开头的示例中,可以随 FULLNAME 函数的代码行编写更加灵活的代码来接受相对路径名。
将物理文件与程序的逻辑单元号相关联的另一种方式是重定向或管道输送预连接的标准 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 |
有关命令行重定向和管道的详细信息,请参见 csh、ksh 和 sh 手册页。