Fortran Library Reference

getfilep: Get File Pointer for External Unit Number

The function is:

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

c_read

C function 

Input 

User's own C function. See example. 

unitn

INTEGER*4

Input 

External unit number. 

getfilep

INTEGER*4 -or- INTEGER*8

Return value 

File pointer if the file is connected; -1 if the file is not connected. An INTEGER*8 value is returned when compiling for 64-bit environments

This function is used for mixing standard FORTRAN I/O with C I/O. Such a mix is nonportable, and is not guaranteed for subsequent releases of the operating system or FORTRAN. Use of this function is not recommended, and no direct interface is provided. You must create your own C routine to use the value returned by getfilep. A sample C routine is shown below.

Example: FORTRAN uses getfilep by passing it to a C function:


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

Sample C function actually using getfilep:


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 ) ;
      }

A sample compile-build-run is:


demo 11% cc -c tgetfilepC.c 
demo 12% f77 tgetfilepC.o tgetfilepF.f 
tgetfileF.f: 
MAIN: 
demo 13% a.out 
What is the digit? 3 
The digit read by C is 3 
demo 14% 

For more information, read the chapter on the C-FORTRAN interface in the Fortran Programming Guide. See also open(2).