環境変数 F_UFMTENDIAN を使用する方法

リトル・エンディアン - ビッグ・エンディアンの変換機能は、Fortran 書式なし入力/出力の演算のためのものです。この機能は、リトル・エンディアンおよびビッグ・エンディアン・データ編成を持つファイルの開発と処理を有効にします。

F_U7FMTENDIAN 環境変数は、プログラムの開始時に 1 度だけ処理されます。特定のユニットまたはすべてのユニットに対してこの環境変数が指定した内容は、プログラムの終了時まで継続されます。

F_UFMTENDIAN 環境変数を設定して、変換に使用されるユニット数を指定します。その後、このユニット数を使用する READ/WRITE 文が対応する変換を実行します。他の READ/WRITE 文は、通常どおり動作します。

F_UFMTENDIAN の一般構文

一般的に、変数はセミコロンで分割される 2 つの部分で構成されます。F_UFMTENDIAN 値の中では、スペースは使用できません。

F_UFMTENDIAN=MODE | [MODE;] EXCEPTION

説明:

MODE = big | little
EXCEPTION = big:ULIST | little:ULIST | ULIST
ULIST = U | ULIST,U
U = decimal | decimal -decimal

変換されたデータは、基本型または基本型の配列です。派生データ型は無効です。

リトル・エンディアンからビッグ・エンディアンへの変換中に、エラーメッセージが表示される場合があります。これらのエラーは、すべて致命的なエラーです。

シェル内の変数設定のコマンドライン (Linux):

Sh: export F_UFMTENDIAN=MODE;EXCEPTION

Note icon

セミコロンがある場合は、環境変数値を引用符で囲む必要があります。

また、環境変数には次の構文があります。

F_UFMTENDIAN=u[,u] . . .


  1. F_UFMTENDIAN=big

    すべての入力/出力操作で、READ ではビッグ・エンディアンからリトル・エンディアンへの変換、WRITE ではリトル・エンディアンからビッグ・エンディアンへの変換を実行します。

  2. F_UFMTENDIAN="little;big:10,20"

    または F_UFMTENDIAN=big:10,20

    または F_UFMTENDIAN=10,20

    入力/出力操作は、ユニット番号 10 から 20 に対してビッグ・エンディアンからリトル・エンディアンへの変換を実行します。

  3. F_UFMTENDIAN="big;little:8"

    上記の変換操作は、ユニット番号 8 に対して行われません。入力/出力操作は、その他のすべてのユニットに対してビッグ・エンディアンからリトル・エンディアンへの変換を実行します。

  4. F_UFMTENDIAN=10-20

    入力/出力操作は、ユニット 10、11、12 ... 19、20 に対してビッグ・エンディアンからリトル・エンディアンへの変換を実行します。

  5. F_UFMTENDIAN=10,100 を設定して、次のプログラムを実行したとします。

    integer*4   cc4
    integer*8   cc8
    integer*4   c4
    integer*8   c8
    c4 = 456
    c8 = 789  
    
    C prepare a little endian representation of data
    
    open(11,file='lit.tmp',form='unformatted')
    write(11) c8
    write(11) c4
    close(11)
    
    C prepare a big endian representation of data
    
    open(10,file='big.tmp',form='unformatted')
    write(10) c8
    write(10) c4
    close(10)
    
    C read big endian data and operate with them on 
    C  little endian machine.
    
    open(100,file='big.tmp',form='unformatted')
    read(100) cc8
    read(100) cc4
    
    C Any operation with data, which have been read
    
    C . . .
    close(100)
    stop
    end
    

    lit.tmp ファイルと big.tmp ファイルを od ユーティリティーで比較します。

    > od -t x4 lit.tmp
    0000000 00000008 00000315 00000000 00000008
    0000020 00000004 000001c8 00000004
    0000034
    > od -t x4 big.tmp
    0000000 08000000 00000000 15030000 08000000
    0000020 04000000 c8010000 04000000
    0000034
    

    これらのファイルでは、バイトの順番が異なることがわかります。