irtn = c_read( getfilep( unitn ), inbyte, 1 ) |
|||
c_read |
C 関数 |
入力 |
この C 関数はユーザーが書く。次の例を参照 |
unitn |
INTEGER*4 |
入力 |
外部装置番号 |
getfilep |
INTEGER*4 または INTEGER*8 |
戻り値 |
ファイルが結合されている場合はファイルポインタ、結合されていない場合は -1。64 ビット環境用にコンパイルすると、INTEGER*8 の値が戻る |
この関数は標準 Fortran の入出力と C の入出力を混在させるために使用します。このような混在は移植不可能であり、今後リリースされるオペレーティングシステムまたは Fortran で使用できる保証はありません。したがって、この関数の使用は勧められませんし、直接のインタフェースは提供されていません。ユーザーは getfilep が戻す値を使用するために独自の C ルーチンを作成する必要があります。C ルーチンの例を次に示します。
例: Fortran は C の関数に渡すのに getfilep を使用します。
demo% cat tgetfilepF.f character*1 inbyte integer*4 c_read, getfilep, unitn / 5 / external getfilep write(*,'(a,$)') '数字は何? ' irtn = c_read( getfilep( unitn ), inbyte, 1 ) write(*,9) inbyte 9 format('C の読み取った数字は ', 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 数字は何? 3 C の読み取った数字は 3 demo% |
詳細については、『Fortran プログラミングガイド』の「C と Fortran のインタフェース」の章を参照してください。参照: open(2)