# mopen

ファイルをオープン

## 呼び出し手順

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

## パラメータ

file

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

mode

  ファイルが読み込み(r), 書き込み (w), または追加 (a) のどれか, ファイルが更新用にオープンされるかどうか(+)を制御する文字列. mode にはバイナリファイルを示す b パラメータを含むことも可能です.

swap

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

err

  スカラー. エラーインジケータ. merror参照.

fd

  スカラー. `mopen`関数によい返された `fd`パラメータがファイル記述子(正の整数)として返されます.

## 説明

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

modeパラメータはストリームに許可される アクセスを制御します. パラメータには以下の値の一つを指定することができます. この値のリストの中で, b文字はバイナリファイルを示します.

r

  ファイルを読み込み用にオープン.

rb

  バイナリファイルを読み込み用にオープン.

rt

  テキストファイルを読み込み用にオープン.

w

  書き込み用に新規ファイルを作成,または ファイルを長さ0に縮める.

wb

  書き込み用にバイナリファイルを作成,または ファイルを長さ0に縮める.

wt

  書き込み用にテキストファイルを作成,または ファイルを長さ0に縮める.

a または ab

  追記 (ファイル終端への書込み用にファイルをオープン, ファイルを書き込み用に作成).

r+ または r+b

  更新用にファイルをオープン (読み込みおよび書き込み).

w+ または w+b

  長さ0に縮めるまたは更新用にファイルを作成.

a+ または a+b

  追記 (更新用にファイルをオープンし, ファイルの終端に書き込み, または書き込み用にファイルを作成).

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

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

functionsのように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