Sun Studio 12:Fortran 库参考

1.4.20 getfilep:获取外部单元编号的文件指针

该函数为:

irtn = c_read( getfilep( unitn ), inbyte, 1 )

c_read

C 函数 

输入 

用户自己的 C 函数。请参见示例。 

unitn

INTEGER*4

输入 

外部单元编号。 

getfilep

INTEGER*4INTEGER*8

返回值 

如果已连接文件,则返回文件指针;如果未连接文件,则返回 -1。如果针对 64 位环境进行了编译,则返回 INTEGER*8

该函数用于将标准的 Fortran I/O 与 C I/O 混在一起。此类混合不可移植,也不保证在使用后续发行版本的操作系统或 Fortran 时可以进行此操作。建议不要使用该函数,并且没有提供直接的接口。必须创建自己的 C 例程,才能使用 getfilep 返回的值。下面所示是一个 C 例程样例。

示例:Fortran 通过将 getfilep 传递给 C 函数来使用 getfile:


demo% cat tgetfilepF.f

        character*1  inbyte
        integer*4    c_read,  getfilep, unitn / 5 /
        external     getfilep
        write(*,’(a,$)’) ’What is the digit? ’

        irtn = c_read( getfilep( unitn ), inbyte, 1 )

        write(*,9)  inbyte
   9    format(’The digit read by C is ’, a )
        end

实际使用 getfilep 的 C 函数样例:


demo% cat tgetfilepC.c

#include <stdio.h>
int c_read_ ( fd, buf, nbytes, buf_len )
FILE **fd ;
char *buf ;
int *nbytes, buf_len ;
{
         return fread( buf, 1, *nbytes, *fd ) ;
}

下面是编译-生成-运行该函数的样例:


demo% cc -c tgetfilepC.c
demo% f95 tgetfilepC.o tgetfilepF.f
demo% a.out
What is the digit? 3
The digit read by C is 3
demo%

有关更多信息,请参见《Fortran 编程指南》中介绍 C-Fortran 接口的章节。另请参见 open(2)。