<?xml version="1.0" encoding="UTF-8"?>

<!--
 * Scilab ( https://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) 2008 - INRIA
 * ...
 *
 * Copyright (C) 2012 - 2016 - Scilab Enterprises
 *
 * This file is hereby licensed under the terms of the GNU GPL v2.0,
 * pursuant to article 5.3.4 of the CeCILL v.2.1.
 * This file was originally licensed under the terms of the CeCILL v2.1,
 * and continues to be available under such terms.
 * For more information, see the COPYING file which you should have received
 * along with this program.
 *
 -->

<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns4="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="mopen" xml:lang="ja">

    <refnamediv>

        <refname>mopen</refname>

        <refpurpose>ファイルをオープン</refpurpose>

    </refnamediv>

    <refsynopsisdiv>

        <title>呼び出し手順</title>

        <synopsis>[fd, err] = mopen(file [, mode, swap ])</synopsis>

    </refsynopsisdiv>

    <refsection>

        <title>引数</title>

        <variablelist>

            <varlistentry>

                <term>file</term>

                <listitem>

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

                </listitem>

            </varlistentry>

            <varlistentry>

                <term>mode</term>

                <listitem>

                    <para>

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

                    </para>

                </listitem>

            </varlistentry>

            <varlistentry>

                <term>swap</term>

                <listitem>

                    <para>

                        スカラー. <varname>swap</varname> が存在し,

                        <code>swap = 0</code>の場合,

                        自動バイトスワップは無効になります.

                    </para>

                    <para>デフォルト値は 1です.</para>

                </listitem>

            </varlistentry>

            <varlistentry>

                <term>err</term>

                <listitem>

                    <para>スカラー. エラーインジケータ. </para>

                    <informaltable border="1">

                        <tr>

                            <td>エラー値:</td>

                            <td>エラーメッセージ:</td>

                        </tr>

                        <tr>

                            <td>0</td>

                            <td>エラー無し</td>

                        </tr>

                        <tr>

                            <td>-1</td>

                            <td>論理ユニットがなくなりました</td>

                        </tr>

                        <tr>

                            <td>-2</td>

                            <td>ファイルをオープンできませんでした</td>

                        </tr>

                        <tr>

                            <td>-3</td>

                            <td>メモリがなくなりました</td>

                        </tr>

                        <tr>

                            <td>-4</td>

                            <td>名前が無効</td>

                        </tr>

                        <tr>

                            <td>-5</td>

                            <td>無効なステータス</td>

                        </tr>

                    </informaltable>
                    <warning>When this output argument is given, no error will be raised by the function.</warning>
                </listitem>

            </varlistentry>

            <varlistentry>

                <term>fd</term>

                <listitem>

                    <para>

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

                    </para>

                </listitem>

            </varlistentry>

        </variablelist>

    </refsection>

    <refsection>

        <title>説明</title>

        <para>

            <function>mopen</function>は,C言語の<function>fopen</function>

            プロシージャと互換の方法で<varname>file</varname>をオープンするために

            使用できます.

            <varname>swap</varname>引数が指定されない場合,

            ファイルが"リトルインディアン IEEE 形式"でコード化されていると

            仮定されます.

            プロセッサのIEEE形式と一致させる必要がある場合,

            データはスワップされます.

        </para>

        <para>

            <varname>mode</varname>パラメータは,ストリームにリクエストされる

            アクセス型を制御します.

            パラメータには以下の値の一つを指定することができます:

            <variablelist>

                <varlistentry>

                    <term>r</term>

                    <listitem>

                        <para>

                            読み込み用にオープン(デフォルト).

                            ファイルは存在する必要があり,そうでない場合は失敗します.

                        </para>

                    </listitem>

                </varlistentry>

                <varlistentry>

                    <term>w</term>

                    <listitem>

                        <para>

                            書き込み用にオープン.

                            ファイルが存在する場合,その内容は破棄されます.

                        </para>

                    </listitem>

                </varlistentry>

                <varlistentry>

                    <term>a</term>

                    <listitem>

                        <para>

                            追記用にオープン.

                            ファイルが存在しない場合は作成されます.

                        </para>

                    </listitem>

                </varlistentry>

                <varlistentry>

                    <term>r+</term>

                    <listitem>

                        <para>

                            読込みおよび書き込み両方でオープン.

                            ファイルは存在する必要があり,そうでない場合は失敗します.

                        </para>

                    </listitem>

                </varlistentry>

                <varlistentry>

                    <term>w+</term>

                    <listitem>

                        <para>

                            読込みおよび書き込み両方でオープン.

                            ファイルが存在する場合,その内容は破棄されます.

                        </para>

                    </listitem>

                </varlistentry>

                <varlistentry>

                    <term>a+</term>

                    <listitem>

                        <para>

                            読込みおよび書き込み両方でオープン.

                            ファイルが存在しない場合は作成されます.

                        </para>

                    </listitem>

                </varlistentry>

            </variablelist>

        </para>

        <para>

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

            <variablelist>

                <varlistentry>

                    <term>t</term>

                    <listitem>

                        <para>テキストファイル.</para>

                    </listitem>

                </varlistentry>

                <varlistentry>

                    <term>b</term>

                    <listitem>

                        <para>バイナリファイル (デフォルト).</para>

                    </listitem>

                </varlistentry>

            </variablelist>

        </para>

        <para>

            デフォルトのアクセスモードは <literal>'rb'</literal>

            (バイナリファイル読込み)です.

        </para>

        <para>

            <note>

                注意: Windowsでは, テキストファイルモードで, CR (復改) - LF (ラインフィード)

                の組は読込み次にLFに変換され,

                LFは書き込み時に CR-LF の組に変換されます.

            </note>

        </para>

        <para>

            更新用にファイルをオープンする際,

            結果のストリームに入力および出力の両方の処理を行うことができます.

            しかし,ファイル中の位置決め処理(<function>mseek</function>関数)を行わずに

            出力処理を入力処理の直後に行うことはできません.

            また,入力処理がファイルの終端に達しない限り,

            ファイルの位置決め処理を中断せずに

            入力処理を出力処理の直後に行うことはできません.

        </para>

        <para>

            ファイルを追記用にオープンする場合(つまり,<varname>mode</varname>パラメータが

            <literal>a</literal>または<literal>a+</literal>の場合),

            ファイルにすでにある情報を上書きすることは

            できません. <function>mseek</function>関数により,

            ファイルの任意の位置にファイルポインタを移動することができますが,

            出力をファイルに書き込む際に,カレントのファイルポインタは無視されます.

            全ての出力はファイルの終端に書き込まれ,

            ファイル位置は出力の末尾に移動されます.

        </para>

        <para>

            Fortran関数と互換性のある方法でファイルをオープンするには,

            <function>file</function>関数を使用してください.

        </para>

    </refsection>

    <refsection>

    </refsection>

    <refsection>

        <title>例</title>

        <programlisting role="example"><![CDATA[
// 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);
    ]]></programlisting>

    </refsection>

    <refsection>

    </refsection>

    <refsection>

        <programlisting role="example"><![CDATA[
// ファイルを書き込みプロパティ付きテキストとしてオープン
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);
    ]]></programlisting>

    </refsection>

    <refsection>

    </refsection>

    <refsection>

        <programlisting role="example"><![CDATA[
// 書き込んだファイルをバイナリとして読み込む

// まずファイルに書き込む
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)
    ]]></programlisting>

    </refsection>

    <refsection role="see also">

        <title>参照</title>

        <simplelist type="inline">

            <member>

                <link linkend="mclose">mclose</link>

            </member>

            <member>

                <link linkend="merror">merror</link>

            </member>

            <member>

                <link linkend="meof">meof</link>

            </member>

            <member>

                <link linkend="mfprintf">mfprintf</link>

            </member>

            <member>

                <link linkend="fprintfMat">fprintfMat</link>

            </member>

            <member>

                <link linkend="mfscanf">mfscanf</link>

            </member>

            <member>

                <link linkend="fscanfMat">fscanfMat</link>

            </member>

            <member>

                <link linkend="mget">mget</link>

            </member>

            <member>

                <link linkend="mgetl">mgetl</link>

            </member>

            <member>

                <link linkend="mgetstr">mgetstr</link>

            </member>

            <member>

                <link linkend="mprintf">mprintf</link>

            </member>

            <member>

                <link linkend="mput">mput</link>

            </member>

            <member>

                <link linkend="mputl">mputl</link>

            </member>

            <member>

                <link linkend="mputstr">mputstr</link>

            </member>

            <member>

                <link linkend="mscanf">mscanf</link>

            </member>

            <member>

                <link linkend="mseek">mseek</link>

            </member>

            <member>

                <link linkend="mtell">mtell</link>

            </member>

            <member>

                <link linkend="mdelete">mdelete</link>

            </member>

        </simplelist>

    </refsection>

</refentry>
