Sun Studio 12 Update 1:Fortran 用户指南

3.4.123 –xfilebyteorder= options

支持 little-endian 和 big-endian 平台之间的文件共享。

该标志标识无格式 I/O 文件数据的字节顺序和字节对齐。options 必须指定下面的任一组合,但必须至少有一个规范:

littlemax_align:spec

bigmax_align:spec

native:spec

max_align 为目标平台声明最大字节对齐。允许的值为 1、2、4、8 和 16。对齐适用于 Fortran VAX 结构和 Fortran 派生类型,它们使用依赖于平台的对齐来获得与 C 语言结构的兼容性。

little 指定平台上的 "little-endian" 文件,其中最大字节对齐为 max_align。例如,little4 指定 32 位 x86 文件;而 little16 描述 64 位 x86 文件。

big 指定最大对齐为 max_align 的 "big-endian" 文件。例如,big8 描述 32 位 SPARC 文件,而 big16 描述 64 位 SPARC 文件。

native 指定字节顺序和对齐与编译处理器平台所用的字节顺序和对齐相同的“本机”文件。假定以下内容为“本机”:

平台  

“本机”对应于:  

32 位 SPARC  

big8

64 位 SPARC  

big16

32 位 x86 

little4

64 位 x86 

little16

spec 必须是包含以下内容的逗号分隔列表:

%all

unit

filename

%all 指所有文件和逻辑单元,但用 "SCRATCH" 打开的或在 -xfilebyteorder 标志中的其他位置显式命名的文件和逻辑单元除外。%all 只能出现一次。

unit 指程序打开的特定 Fortran 单元号。

filename 指程序打开的特定 Fortran 文件名。

3.4.123.1 示例:

-xfilebyteorder=little4:1,2,afile.in,big8:9,bfile.out,12
-xfilebyteorder=little8:%all,big16:20

3.4.123.2 注:

此选项不适用于使用 STATUS="SCRATCH" 打开的文件。对这些文件执行的 I/O 操作始终依照本机处理器的字节顺序和字节对齐。

如果命令行中没有出现 -xfilebyteorder,则第一个缺省设置为 -xfilebyteorder=native:%all

在此选项中只能声明一次文件名或单元号。

如果在命令行中出现了 -xfilebyteorder,则它必须至少带有 little、big 或 native 规范之一。

将此标志没有显式声明的文件假定为本机文件。例如,如果使用 -xfilebyteorder=little4:zork.out 进行编译,就会将 zork.out 声明为最大数据对齐为 4 字节的 little-endian 32 位 x86 文件。程序中的所有其他文件均是本机文件。

如果为文件指定的字节顺序与本机处理器相同,但指定了不同的对齐,即使没有进行字节交换,也会使用相应的填充。例如,如果针对 64 位 x86 平台使用 -m64 进行编译,并指定了 -xfilebyteorder=little4:filename,就会出现这种情况。

大端字节序和小端字节序平台之间共享的数据记录中的声明类型必须具有相同的大小。例如,使用 -xtypemap=integer:64,real:64,double:64 编译的 x86 可执行文件不能读取使用 -xtypemap=integer:64,real:64,double:128 编译的 SPARC 可执行文件生成的文件,因为二者的缺省双精度数据类型具有不同的大小。(不过请注意,从 Sun Studio 12 Update 1 发行版开始,x64 处理器上接受 double:128。)

如果在一个平台上使用了更改 VAX 结构内的组件对齐方式的选项(如 —vax=struct_align)或更改派生类型内的组件对齐方式的选项(如 —aligncommon—dalign),则在共享同一无格式数据文件(其内容受对齐选项影响)的其他平台上也要使用同一对齐选项。

如果使用整个 UNION/MAP 数据对象对指定为非本机的文件执行 I/O 操作,则会导致运行时 I/O 错误。只能使用 MAP 的个别成员(而不能使用包含 UNION/MAP 的整个 VAX 记录)对非本机文件执行 I/O 操作。