mopen ファイルをオープン

## 呼び出し手順

    [fd, err] = mopen(file [, mode, swap ])

## 引数

file

  オープンするファイルのパスを有する文字列.

mode

  ファイルにリクエストするアクセスモードを指定する文字列.

swap

  スカラー. `swap` が存在し, `swap = 0`の場合, 自動バイトスワップは無効になります.

  デフォルト値は 1です.

err

  スカラー. エラーインジケータ.

  エラー値: | エラーメッセージ:
  0 | エラー無し
  -1 | 論理ユニットがなくなりました
  -2 | ファイルをオープンできませんでした
  -3 | メモリがなくなりました
  -4 | 名前が無効
  -5 | 無効なステータス

  When this output argument is given, no error will be raised by the function.
fd

  スカラー: ファイル記述子(正の整数).

## 説明

`mopen`は,C言語の`fopen` プロシージャと互換の方法で`file`をオープンするために 使用できます. `swap`引数が指定されない場合, ファイルが"リトルインディアン IEEE 形式"でコード化されていると 仮定されます. プロセッサのIEEE形式と一致させる必要がある場合, データはスワップされます.

`mode`パラメータは,ストリームにリクエストされる アクセス型を制御します. パラメータには以下の値の一つを指定することができます:

r

  読み込み用にオープン(デフォルト). ファイルは存在する必要があり,そうでない場合は失敗します.

w

  書き込み用にオープン. ファイルが存在する場合,その内容は破棄されます.

a

  追記用にオープン. ファイルが存在しない場合は作成されます.

r+

  読込みおよび書き込み両方でオープン. ファイルは存在する必要があり,そうでない場合は失敗します.

w+

  読込みおよび書き込み両方でオープン. ファイルが存在する場合,その内容は破棄されます.

a+

  読込みおよび書き込み両方でオープン. ファイルが存在しない場合は作成されます.

加えて, ファイルの型を指定するために以下の文字を使用できます:

t

  テキストファイル.

b

  バイナリファイル (デフォルト).

デフォルトのアクセスモードは `'rb'` (バイナリファイル読込み)です.

注意: Windowsでは, テキストファイルモードで, CR (復改) - LF (ラインフィード) の組は読込み次にLFに変換され, LFは書き込み時に CR-LF の組に変換されます.

更新用にファイルをオープンする際, 結果のストリームに入力および出力の両方の処理を行うことができます. しかし,ファイル中の位置決め処理(`mseek`関数)を行わずに 出力処理を入力処理の直後に行うことはできません. また,入力処理がファイルの終端に達しない限り, ファイルの位置決め処理を中断せずに 入力処理を出力処理の直後に行うことはできません.

ファイルを追記用にオープンする場合(つまり,`mode`パラメータが `a`または`a+`の場合), ファイルにすでにある情報を上書きすることは できません. `mseek`関数により, ファイルの任意の位置にファイルポインタを移動することができますが, 出力をファイルに書き込む際に,カレントのファイルポインタは無視されます. 全ての出力はファイルの終端に書き込まれ, ファイル位置は出力の末尾に移動されます.

Fortran関数と互換性のある方法でファイルをオープンするには, `file`関数を使用してください.

## 例

    // SCI+'/ACKNOWLEDGEMENTS'をテキスト,読込みのみとしてオープン
    fd_r = mopen(SCI+'/ACKNOWLEDGEMENTS','rt')

    // fd_rから5行読み込む
    mgetl(fd_r, 5)

    // ファイルを読み込む他の方法
    // 5ワードを読み込む
    mfscanf(5,fd_r,'%s')

    // テキスト,読込みのみのSCI+'/ACKNOWLEDGEMENTS'のファイル記述子を閉じる
    mclose(fd_r);

    // ファイルを書き込みプロパティ付きテキストとしてオープン
    fd_w = mopen(TMPDIR+'/write.txt','wt');

    // fd_w に1行書き込み
    mputl('This is a line of text', fwd_w);
    mclose(fd_w);

    // テキスト読み込み
    fd_r2 = mopen(TMPDIR+'/write.txt','rt');
    mgetl(fd_r2)
    mclose(fd_r2);

    // 書き込んだファイルをバイナリとして読み込む

    // まずファイルに書き込む
    fd_wb = mopen(TMPDIR+'/writeread.bin','wb')

    // バイナリとして値を出力
    mput(2003,'l',fd_wb);
    mput(2008,'i',fd_wb);
    mput(2012,'s',fd_wb);
    mput(98,'c',fd_wb);

    // TMPDIR+'/writeread.bin'を指すファイル記述子を閉じる
    mclose(fd_wb);

    // ファイルを読み込む
    fd_rb = mopen(TMPDIR+'/writeread.bin','rb')

    mget(fd_rb, 'l')
    mget(fd_rb, 'i')
    mget(fd_rb, 's')
    mget(fd_rb, 'c')

    mclose(fd_rb)

## 参照

- mclose
- merror
- meof
- mfprintf
- fprintfMat
- mfscanf
- fscanfMat
- mget
- mgetl
- mgetstr
- mprintf
- mput
- mputl
- mputstr
- mscanf
- mseek
- mtell
- mdelete