f95 中实现了 Fortran 2003 标准“流”I/O 的新方案 。流 I/O 访问将数据文件视作连续的字节序列,用从 1 开始的正整数来寻址。可用 OPEN 语句中的 ACCESS=’STREAM’ 说明符来声明流 I/O 文件。字节地址文件定位要求 READ 或 WRITE 语句中有 POS=scalar_integer_expression 说明符。INQUIRE 语句接受 ACCESS=’STREAM’、说明符 STREAM=scalar_character_variable 和 POS=scalar_integer_variable。
流 I/O 在与 C 程序创建或读取的文件进行互操作时非常有用,如下例所示:
Fortran 95 program reads files created by C fwrite() program reader integer:: a(1024), i, result open(file="test", unit=8, access="stream",form="unformatted") ! read all of a read(8) a do i = 1,1024 if (a(i) .ne. i-1) print *,’error at ’, i enddo ! read the file backward do i = 1024,1,-1 read(8, pos=(i-1)*4+1) result if (result .ne. i-1) print *,’error at ’, i enddo close(8) end C program writes to a file #include <stdio.h> int binary_data[1024]; /* Create a file with 1024 32-bit integers */ int main(void) { int i; FILE *fp; for (i = 0; i < 1024; ++i) binary_data[i] = i; fp = fopen("test", "w"); fwrite(binary_data, sizeof(binary_data), 1, fp); fclose(fp); } |
C 程序使用 C fwrite() 将 1024 个 32 位整数写入文件中。Fortran 95 读取程序以数组方式一次读取这些数据,然后再在文件中从后往前分别读取它们。第二条 read 语句中的 pos= 说明符说明位置是用字节表示的,从字节 1 开始(这一点与 C 相反,在 C 中,位置从字节 0 开始)。