<?xml version="1.0" encoding="UTF-8"?>
<!--
 * Scilab ( https://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) XXXX-2008 - INRIA
 * Copyright (C) 2018 - Samuel GOUGEON
 *
 * 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:ns5="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="fileinfo" xml:lang="ja">
    <refnamediv>
        <refname>fileinfo</refname>
        <refpurpose>ファイルに関する情報を出力</refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>呼び出し手順</title>
        <synopsis>
             x = fileinfo(filesPaths)
            [x,ierr] = fileinfo(filesPaths)
        </synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>引数</title>
        <variablelist>
            <varlistentry>
                <term>filesPaths</term>
                <listitem>
                    <para>文字列または文字列の列ベクトル, ファイルパス名
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>x</term>
                <listitem>
                    <para>
                        情報を含む大きさ13の整数ベクトルまたは
                        ファイルが存在しない場合に空の行列.
                    </para>
                    <para>
                        <varname>filesPaths</varname>が文字列の列ベクトルの場合,
                        <varname>x</varname> は
                        大きさ<literal>m x 13</literal>の行列となります.
                    </para>
                    <para>
                        あるファイル名が存在しない場合, 出力情報として,
                        各要素に<constant>Nan</constant>を有する
                        大きさ13の行を返します.
                    </para>
                    <para>
                        <table>
                            <tr><th>x column</th><th align="left">Description</th></tr>
                            <tr><td align="center" valign="top">1 : </td>
                                <td>ファイルの大きさ</td>
                            </tr>
                            <tr><td align="center" valign="top">2 : </td>
                                <td>ファイルモード (10進値).</td>
                            </tr>
                            <tr><td align="center" valign="top">3 : </td>
                                <td>ユーザid (always 0 on Windows)</td>
                            </tr>
                            <tr><td align="center" valign="top">4 : </td>
                                <td>グループid (always 0 on Windows)</td>
                            </tr>
                            <tr><td align="center" valign="top">5 : </td>
                                <td>デバイス番号</td>
                            </tr>
                            <tr><td align="center" valign="top">6 : </td>
                                <td>
                                    UNIX timestamp of last data modification.
                                    <literal>getdate(x(:,6))(:,[1 2 6 7 8 9])</literal> returns the
                                    corresponding date as a matrix of [year month day hour mn ss]
                                    numerical rows.
                                </td>
                            </tr>
                            <tr><td align="center" valign="top">7 : </td>
                                <td>直近の変更日</td>
                            </tr>
                            <tr><td align="center" valign="top">8 : </td>
                                <td>直近のアクセス日</td>
                            </tr>
                            <tr><td align="center" valign="top">9 : </td>
                                <td>デバイス型 (inode デバイスの場合)</td>
                            </tr>
                            <tr><td align="center" valign="top">10 : </td>
                                <td>ファイルシステム I/O のブロックサイズ (Windowsでは常に0)</td>
                            </tr>
                            <tr><td align="center" valign="top">11 : </td>
                                <td>確保されたブロック数 (Windowsでは常に0)</td>
                            </tr>
                            <tr><td align="center" valign="top">12 : </td>
                                <td>File's inode (unique id) (always 0 on Windows)</td>
                            </tr>
                            <tr><td align="center" valign="top">13 : </td>
                                <td>ハードリンクの数</td>
                            </tr>
                        </table>
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>ierr</term>
                <listitem>
                    <para>エラーインジケータ, エラーが発生していない場合に 0</para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>説明</title>
        <para>
            この関数はC関数<function>stat</function>へのインターフェイスです.
        </para>
        <para>
            許可属性は,通常,8進数で指定されます : 変換には<code>dec2oct(x(2))</code>
            を使用します
        </para>
        <para>
            数値モードは,1から4個の8進数 (0-7),
            4, 2, および 1でビットを加算することにより導かれます.
            全ての省略された桁は先頭にゼロがあると仮定されます.
            最初の桁はユーザID(4)を選択し,
            グループID(2)およびスティッキー(1)属性を設定します.
            2番目の桁は,fileを所有するユーザの許可属性を選択します
            : 読み込み(4), 書き込み(2),実行(1);
            3桁目はファイルのグループの同じ値を有する
            他のユーザの許可属性を選択します;
            4桁目はファイルグループにない同じ値を有する許可属性を
            選択します.
        </para>
        <para>
            許可属性を確認するには, マスクを使用する必要があります.
            次の例を見てみましょう:
            8進数, x(2)=1664, 最初の桁はsticky属性に対応します.
            2桁目はファイル所有者が書き込みおよび読込権限を有することを示します.
            これは,このファイルのグループ内の他のユーザも同じです.
            最後に他のユーザは読込権限のみ有します.
            マスクを適用するには, この8進数をバイナリ(2進数)形式で見るだけで構いません.
            つまり:<varname>x</varname>(2)= 1 110 110 100.
            所有者が書き込み権限を有するかどうか確認するには,
            2番目のトリプレット: 110 を見て, 書き込み許可 010 を有するものと比較します.
            つまり,処理は以下のようになります: 110 000 000 &amp; 010 000 000.
            結果がヌルでない場合 (本ケースが相当), 所有者が書き込み権限を有します.
        </para>
    </refsection>
    <refsection>
        <title>例</title>
        <programlisting role="example"><![CDATA[
w = fileinfo(SCI+'/etc/scilab.start')
// ファイル許可属性
dec2oct(w(2))
// ファイルの日付:  [year month day hh mn ss .ss]
getdate(w(6))(:,[1 2 6:10])

// 許可
S_IWRITE = 128; // 書き込み許可属性をマスク
S_IEXEC = 64; // 実行許可属性をマスク
S_IREAD = 256; // 読み込み許可属性をマスク
S_IFCHR = 8192; // ディレクトリ許可属性をマスク

// 書き込み許可を確認
if ( bitand( w(2), S_IWRITE ) <> 0) then
 disp('WRITE PERMISSION on this file.');
else
 disp('NO WRITE PERMISSION on this file.');
end

// 読込許可を確認
if ( bitand( w(2), S_IREAD ) <> 0) then
 disp('READ PERMISSION on this file.');
else
 disp('NO READ PERMISSION on this file.');
end
FILES = [SCI;SCIHOME;'not_exist_file';TMPDIR]
[X,ERRS] = fileinfo(FILES)
 ]]></programlisting>
    </refsection>
    <refsection role="see also">
        <title>参照</title>
        <simplelist type="inline">
            <member>
                <link linkend="getdate">getdate</link>
            </member>
            <member>
                <link linkend="file">file</link>
            </member>
            <member>
                <link linkend="dispfiles">dispfiles</link>
            </member>
            <member>
                <link linkend="newest">newest</link>
            </member>
            <member>
                <link linkend="isfile">isfile</link>
            </member>
            <member>
                <link linkend="isdir">isdir</link>
            </member>
        </simplelist>
    </refsection>
    <refsection>
        <title>履歴</title>
        <revhistory>
            <revision>
                <revnumber>6.0.0</revnumber>
                <revremark>
                    Several files paths can now be processed.
                </revremark>
            </revision>
        </revhistory>
    </refsection>
</refentry>