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 开始)。