Sun Studio 12:Fortran 编程指南

2.4 流 I/O

f95 中实现了 Fortran 2003 标准“流”I/O 的新方案 。流 I/O 访问将数据文件视作连续的字节序列,用从 1 开始的正整数来寻址。可用 OPEN 语句中的 ACCESS=’STREAM’ 说明符来声明流 I/O 文件。字节地址文件定位要求 READWRITE 语句中有 POS=scalar_integer_expression 说明符。INQUIRE 语句接受 ACCESS=’STREAM’、说明符 STREAM=scalar_character_variablePOS=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 开始)。