ファイル管理機能ではフロッピーディスク ( FD )、 ハードディスク ( HD ) 等の上に作成されるファイルシステムの論理構造、 およびファイルを取り扱うためのシステムコール群を規定している。
ファイルシステムを実現する上での各種の物理構造やデータ構造は、 インプリメントに依存するが、 交換用媒体としてのフロッピーディスクに関しては互換性を保つために物理構造の詳細が規定されている。
ファイルシステムは、実身 / 仮身モデルを基本とした構造となっており、 以下のような特徴を持つ。
ファイルは時系列上において複数のユーザにより使用され、 さらにネットワーク環境では複数のユーザにより同時に使用されるためファイルのアクセス管理をきめ細かく行ない、 高いレベルの保護機構を提供している。
ファイルはデータを保持するための容器または保持されたデータ自体であり、 1 つのファイルは可変長の順序付けられたレコードの列から構成される。
リンクはファイルを参照するための手掛かりとなる一種のポインタであり、 参照するファイルを示すデータとリンク独自のいくつかの属性データをひとまとめにしたデータ構造である。
リンクは、 1 つのレコードとして任意のファイルの中に埋め込まれて存在する。 1 つのファイルを示すリンクは複数個存在しても良く、 これにより全体としてネットワーク状の任意のファイル間の参照関係が定義される。
実身 / 仮身モデルとの対応において、 ファイルは実身に、リンクは仮身に 1 対 1 に対応することになる。 実身 / 仮身モデルでは、 ユーザとのビジュアルインタフェースを基本としており、 その意味で、特に仮身はリンクのビジュアル表現とみなすことができる。
ファイルの参照は基本的にリンクを通して直接行なわれるため、 ファイルの名前は絶対的な意味を持たず、 1つの検索キーとして使用される。 ファイル名としては最大20文字の任意のファイル名が付けられるが、 同一のファイル名が存在しても構わない。
ファイルシステムはファイルを管理するための 1 つの物理的な単位であり、 1つの機器上の以下のような記憶媒体上に構築され、物理的なサイズの上限を持つ。
ファイルシステムには、必ず 1 つのルートファイルが存在し、 そのルートファイルに含まれるリンクを順次たどっていくことにより、 そのファイルシステム内の全てのファイルに基本的に到達可能である。 ルートファイルは、実身 / 仮身モデルとの対応においてデバイス実身に対応する。
ファイル間のリンクによる参照関係は、 基本的に 1 つのファイルシステム内で定義され整合が取られるが、 他のファイルシステムに存在するファイルを参照するための間接的なリンクを持つことができ、 これを特に間接リンクと呼ぶ。 間接リンクによる参照の場合は、 参照先の他のファイルシステムの変更に対する整合は取られないため、 参照先のファイルの存在は保証されない場合があるため注意が必要である。
ファイルシステムの生成時には、 ファイルシステム名、およびデバイス所在名が設定される。
ファイルシステム名はルートファイルの名称としても設定される最大 20 文字の名前であり、 システムおよびユーザがファイルシステムを絶対的に識別するために使用される。 ファイルシステム名が同一のファイルシステムは、同一とみなされるため、 ファイルシステム名はユニークでなければいけない。
デバイス所在名は、 ファイルシステムが格納されている物理デバイスを示す最大20文字の名前であり、 ネットワーク経由で他のマシンをアクセスする場合や、 フロッピー等の装着を求める場合に使用される。 通常、 デバイス所在名としてはハードディスク等の機器に固定的に付属しているデバイスの場合にはその媒体の一般名称 ( 即ち「ハードディスク」等 ) が使用され、 フロッピーディスク等の取り外し可能な媒体の場合にはその媒体の一般名称 ( 即ち「フロッピーディスク」等 ) が使用される。
システムのスタートアップ時には、 ファイルシステムは 1 つも存在していない状態であり、 接続操作を行なうことにより初めて、 ファイルシステムとして使用することが可能となる。 従って、 通常はシステムの初期化処理として最低限のファイルシステムの接続を行なう必要がある。
ファイルシステムの接続は、 接続するファイルシステムが存在する論理デバイス名と、 接続名を指定して行なわれる。接続名は接続したファイルシステムを識別するための最大 8 文字の名前であり、 接続したファイルシステムのルートファイルを示す絶対パス名称として使用される。 また、接続時には接続したファイルシステムのルートファイルへのリンクが得られる。
従って、接続時に得られたリンク、または接続名を使用することにより、 接続したファイルシステム上のルートファイルをアクセスすることが可能となり、 ルートファイルから順次リンクをたどることにより、 接続したファイルシステム上の任意のファイルをアクセスすることが可能となる。
ファイルシステムの切断は、 切断するファイルシステムの論理デバイス名を指定して行なわれ、 これにより切断したファイルシステム上のファイルを示すリンクを通したファイルのアクセスはできない状態となり、 この状態を切断状態と呼ぶ。
実身 / 仮身モデルとの対応において、切断状態のリンクは虚身に対応することになる。
ファイルシステムの接続は、 単にファイルシステムの存在をファイル管理機能に動的に登録するだけの機能であり、 構造を持たない平坦な接続である。 従って、複数のファイルシステムをまたがるネットワーク状の静的なファイル参照構造は、 異なるファイルシステム上のファイルを参照する間接リンクを利用して構築することになる。
1 つのファイルシステム内の全てのファイルには、 生成時にファイルIDと呼ばれるユニークな番号が付けられ、 内部的に識別される。ファイルIDは 0 〜 ( 最大ファイルID ) の範囲の値であり、 最大ファイルID(即ち、最大のファイル数)はファイルシステムの生成時に規定される。 ファイルIDは 16 ビットの数値で表わされるため、 最大ファイルIDは 65535 を越えることはできない。
ファイルシステムのルートファイルは常に 0 のファイル ID を持つ。
リンクは、ファイルをアクセスするための手掛かりとなる一種のポインタであり、 参照するファイルが存在するファイルシステム名、ファイルID 、 およびリンクとしてのいくつかの属性データを保持しているデータ構造である。
リンクは、ビジュアルな操作環境では、仮身として表示される。
リンクは単なるポインタとしての動的なデータであるが、 ファイル内に 1 つのレコードとして格納することにより固定的な存在となる。 このように格納されたリンクを特に固定 ( フィックスド ) リンクと呼ぶ。固定リンクはファイルシステム名を持たないため、 同一のファイルシステム内のファイルの参照のみ可能であり、 ファイルから固定リンクを取り出した時点で、 そのファイルの属するファイルシステム名がリンクのデータ構造として設定されることになる。
このため、 異なるファイルシステムを参照するリンクを固定リンクとしてファイル内に格納する場合は、 あらかじめ、格納するファイルシステム内にリンクファイルと呼ばれる特殊なファイルを生成し、 そのリンクファイルを示すリンクを固定リンクとして格納する必要がある。
リンクファイルは、参照するファイルの存在するファイルシステム名、 ファイルID、ファイル名、および生成日時 を保持している特殊なファイルであり、 リンクファイルへのアクセスは、 参照している異なるファイルシステム内のファイルへのアクセスと自動的に解釈される。 リンクファイルを示すリンクを特に間接リンクと呼び、 通常のファイルを示すリンクを直接リンクと呼ぶ。
多重の間接リンク、 即ち 2 つ以上のリンクファイルを経由したファイルの参照はサポートされないため、 アクセスした時点でファイルは存在しないというエラーになる。
間接リンクによるリンクファイル経由によるファイルの参照は、 以下のように行なわれる。
ファイルシステム名によりファイルシステムを特定する。 接続されていない場合は、 アクセスは不可となる。なお、接続名は、 リンクファイル経由のアクセスには無関係である。
ファイルIDにより特定したファイルシステム内のファイルをチェックし、
ファイル名および生成日時の両方またはどちらか一方が一致しており、
かつそのファイルがリンクファイルでない場合に、
そのファイルを対象としてアクセスを行なう。
それ以外の場合は、参照すべきファイルが存在しなくなったものとみなしてア
クセスは不可となる。
あるプロセスが現在処理の対象としているファイルをそのプロセスの作業ファイルと呼ぶ。 プロセスはシステムコールにより任意のファイルを作業ファイルとすることが可能である。
作業ファイルはプロセスの実行環境として保持されており、 生成した子プロセスに継承される。
作業ファイルは未定義とすることも可能であり、 システムで最初に生成されたプロセスの作業ファイルは未定義状態となっている。
ファイルの参照は基本的にリンクにより直接的に行なわれるが、 バッチ的なアプリケーション等では、 リンクをインタラクティブに順番にたどることができないため、 直接的にたどるべきリンクの列を指定することによりファイルを参照することになる。
このためのリンクの列として、 各リンクの参照するファイル名を順番に並べたものを、 パス名と呼ぶ。この場合、ファイル名だけでは一意性が保証されないため、 その出現順をファイル名に付加して使用する。
出現順は、
1 つのファイル内に同一のファイル名を持つファイルを参照するリンクが n
個存在する場合に先頭から付けられた 0 〜 n-1
の連続番号である。
出現順を省略した場合は 0、即ち最初とみなされる。
パス名は以下に示す構文を持ち、 最大 256 文字までの 1 つの文字列として取り扱われる。
[パス名] ::=[特殊参照]|[特殊参照] / [単純パス名]|[単純パス名] [単純パス名] ::=[単純パス名] / [参照指定]| [参照指定] [参照指定] ::=[ファイル名] |[ファイル名]:[出現順] [特殊参照] ::= / [接続名]| ≡ [出現順] ::= 数値 [ファイル名] ::= 文字列 (最大20文字) [接続名] ::= 文字列 (最大8文字) 特殊参照は以下の意味を持つ。 / [接続名] -- 指定した接続名で接続したファイルシステムのルートファイルを示す。 ≡ -- 作業ファイルを示す。
/ ≡ :
の記号は、それぞれ以下に示す特殊コードであるため、
ファイル名としては空白を含めた表示可能なすべての文字が使用可能である。
パス名の文字列の最後に / が存在していた場合は、
それは無視されるものとする。
/ TC_FDLM 0xff21 : TC_FSEP 0xff22 ≡ TC_FOWN 0xff23
/ [接続名]で始まるパス名は、 そのファイルシステムのルートファイルからのパス名であり、 絶対パス名と呼ぶ。 それ以外の場合は現在の作業ファイルからの相対的なパス名であり、 相対パス名と呼ぶ。
パス名としては以下のようなものがあげられる。
/最新/プロジェクト/ソフトウェア仕様/核仕様/ファイル管理 外部仕様/第10章/例:1 ≡
ファイルには、大きく以下の2種類のタイプが存在し、 単にファイルと言った場合は、通常ファイルを意味する。
なお、FD、HD、プリンタ、通信ライン等の物理的なデバイスは、 ファイルとしてではなく独立したデバイスとして取り扱う。 これらのデバイスはユニークな名前によりシステムに登録され、 その名前を使用してアクセスされる。
( 通常 ) ファイルは、 任意バイト長のレコードの順序付けられた列、 即ちレコードストリームにより構成され、 各レコードは、以下の要素により構成される。
レコードタイプは、レコードのタイプを示す 0 〜 31 の値である。
他のファイルへのリンクを格納するレコードであり、 その内容はファイル管理機能により直接的に取り扱われ、 アプリケーションからの直接的な操作は限定される。
システムとして規定されるレコードタイプであるが、 その内容に関してはファイル管理機能としては特に関知せず、 単なるバイト列として取り扱う。
レコードサブタイプは、レコードタイプに応じて使用される補助的なタイプ指定や、 キーワードに使用される 16 ビットの符号無し数値である。
レコードサイズは、レコード本体のバイト数を示す32ビットのデータである。 リンクレコードの場合はレコードサイズ情報を持たないが、 レコードの入出力に必要な領域のサイズである LINK 構造体のサイズ (52バイト) をレコードサイズとする。 ただし、このリンクレコードのサイズは、 ファイル管理情報としての総バイト数には、 カウントされない。
レコード本体は、レコードサイズで示されたバイト数のデータ列であり、 その内容はレコードタイプに依存して決められている。 リンクレコードの場合はレコード本体は特殊な取り扱いとなる。
ファイルの各レコードには、先頭のレコードを 0 としたレコードの順番に従った連続番号が付けられており、 これをレコード番号と呼ぶ。 レコード番号はレコードの順番を示しているためレコードの挿入 / 削除により動的に変化する。
最後のレコードの次に仮想的にレコードが存在しているものと考え、 このレコードを終端レコードと呼ぶ。 N 個のレコードがある場合、終端レコードはレコード番号 N を持つことになる。
オープンしたファイルに対しては現在、 アクセスの対象としているレコードを示す現在レコードが定義され、 現在レコードのレコードに対してデータアクセスが行なわれる。 現在レコードはレコード番号の指定、 レコードタイプによる検索等により移動させることができる。
現在レコードはレコードの挿入 / 削除によっても変化せず、 現在レコードに対応するレコード番号が変化することになる。
リンクファイルは、 異なるファイルシステム内に存在するファイルを間接的に参照するために生成され使用されるファイルであり、 アプリケーションデータは存在せず、以下に示す管理用データのみが保存されている。
ファイルのアクセス管理はファイルをアクセスできるユーザを特定、 または制限することにより、 ファイルの機密保護や不慮の改変/削除から保護するための機構であり、 ファイルをアクセスするプロセスが持つユーザ情報と、 各ファイルに設定されたアクセス管理情報を照らし合わせることによりファイルアクセスの可否を決定することになる。
各ユーザには、以下に示すユーザ情報が設定される。
隠しユーザ名、隠しグループ名は、英数字 4 文字程度を暗号化して、 2 文字にコード化したものであり、ユーザ名、グループ名と合わせて、 それぞれ 14 文字の名前として使用される。 隠し名は同一名の衝突を避けるとともに、暗証コードとしての役割を持っている。
隠し名の暗号化アルゴリズムはインプリメントに依存した非公開のものであり、 また個々の機器毎に異なる暗号化がされる必要がある。
これらのユーザ情報はシステム動作開始時に使用者のデフォールト値から読み込まれ、 初期プロセスのユーザ情報となる。 このユーザ情報は子プロセスに継承され、 そのプロセスがファイルをアクセスする際のユーザ情報として使用される。
各ファイルには以下のアクセス管理情報が設定される。
RWE
それぞれの可否
RWE
それぞれが許可されている最低ユーザレベル
(0〜15) の指定
RWE
それぞれが許可されている最低ユーザレベル ( 0〜15 ) の指定
アクセスモードの、RWE
は以下の意味を持つ。
R -- ファイルの読出しの可否 W -- ファイルへの書込み / 変更の可否 E -- ファイルの実行またはファイル内のリンクの検索の可否
ファイルの所有者名は、そのファイルを生成したユーザ名が自動的に設定され、 生成した後は一切変更することはできない。また、グループ名、アクセスモードは、 ファイルの生成時に指定することができる。グループ名は、 そのユーザが所属する最大 4 つのグループのなかの 1 つを指定することになる。
即ち、ファイルの生成時には、以下のものを指定することができる。
RWE
それぞれの可否
RWE
それぞれの許可最低レベル (0〜15)
RWE
それぞれの許可最低レベル (0〜15)
ユーザ毎にデフォールトアクセスモードが定義されており、 ファイルの生成時にデフォールトとして適用させることができる。 このデフォールトアクセスモードはユーザー固有の情報として格納されている内容が使用されるが、 実行時に変更することも可能である。 変更した内容はそのユーザの全プロセスに対して有効となる。
また、ファイルの所有者名、 グループ名の最初の 1 バイトが 0 の場合は、 所有者またはグループが存在しないことを意味し、 その場合は所有者アクセスモード、 グループアクセスレベルは誰にも適用されないことになる。
ファイルに設定されたアクセス管理情報は、 その所有者のみが変更できる (ただし、所有者名は一切変更できない) 。 所有者がないファイルの場合は、 例外的にレベル 0 のユーザーであればアクセス管理情報を変更することができる。
書込不可属性は、ファイルの内容の変更を禁止する属性であり、 この属性が ON の状態ではすべての変更操作は所有者を含めた全てのユーザに対して禁止される。
削除不可属性は、ファイルの削除を禁止する属性であり、 この属性が ON の状態では、 ファイルの削除は所有者を含めた全てのユーザに対して禁止される。
削除不可属性が設定されていないファイルの削除は、 特にアクセス権を必要としないが、 ファイルはどこからも参照されていない場合にのみ削除可能であるため、 実際には削除すべきファイルへの固定リンクを含むすべてのファイルの書込みアクセス権がない限り削除できないことになる。
なお、ファイルシステムの接続操作においては、 書込不可の接続指定が可能であり、 この場合はそのファイルシステムに対するいかなる変更操作も禁止される。 同様に物理的に「書き込み不可」となっているフロッピーディスク等の場合も、 いかなる変更操作も禁止される。
ファイルのアクセスチェックは、そのユーザが所有者であれば、 所有者アクセスモード、グループに所属していればグループアクセスレベル、 その他の場合は一般アクセスレベルが適用される。
ファイルの所有者名、グループ名の隠し名が0の場合は、 隠し名のマッチングは行なわないものとする。 即ち、プロセスのユーザ情報にある所有者名、 グループ名のそれぞれ 12 文字のみのマッチングにより同一性を判断することになる。
レベル 0 のユーザは、基本的にすべてのファイルの RWE
が可能 ( 書込不可属性が付けられた場合には W はできない)
となるが、所有者としての権利はないため、アクセスモード、
アクセス属性等を変更することはできない。
例: 所有者 : 佐藤 所有グループ : プロジェクトA 所有者アクセスモード : R W E 可能 グループアクセスレベル : R レベル 13, W レベル 10, E レベル 13 一般アクセスレベル : R レベル 3, W レベル 1, E レベル 5
上記の例の場合、「プロジェクトA」に所属するレベル 0 〜 10 のユーザは、
RWE 可能であり、
レベル 11 〜 13 のユーザは、RE 可能で、
レベル 14, 15 のユーザは一切のアクセスは禁止される。
また、「プロジェクトA」に属さないユーザに対しては、
レベル 0、1 は RWE 可能であり、レベル 2、3 は RE 可能、
レベル 4、5 は 3 のみ可能、
レベル 6 〜 15 は一切のアクセスが禁止される。
フロッピーディスクは、通常データの交換媒体として使用されることが多く、 フロッピーディスク上のファイルに対してはアクセス管理はない方が都合が良い場合が多い。 ただし、交換の相手を特定したい場合や、 共用的に使用する場合にはアクセス管理が有効な場合もある。
このために、 ファイルシステム単位で以下の 3 種類のアクセス管理のレベルを設定することができるようにする。 このアクセス管理のレベルは、 そのファイルシステム上のすべてのファイルに対して適用され、 ファイルを生成する場合、およびファイルのアクセス管理情報を変更する場合に、 以下に示したルールに従ってアクセス管理情報の設定が行なわれる。
従って、 ファイルの通常のアクセスチェックに関してはレベルの区別なく行なわれるが、 所有者のチェックに関しては、 レベル0のファイルシステムは特別に取り扱われ、 誰でも所有者としての権利を持つことになる。
常に以下の内容のアクセス管理情報が設定される。
所有者名、隠し名 : 0 (なし) グループ名、隠し名 : 0 (なし) 所有者アスセス : 0 (RWE不可) グループアクセスレベル : 0 (RWE不可) 一般アクセスレベル : 0x0fff (誰でもRWE可)
所有者名/グループ名の隠し名は常に 0 に設定される。
完全なアクセス管理情報が設定される。
一般にフロッピーディスク等の取り外し可能媒体に対しては、 レベル 0 またはレベル 1 とし、 ハードディスク等の機器に固定的に付属するものに関してはレベル 2 とする。 取り外し可能媒体に対してレベル 2 を設定した場合は、 暗号化が機器毎に異なるため事実上 1 つの機器でしか使用できなくなる。
このアクセス管理レベルはファイルシステムを生成する時点で、 ファイルシステムの管理情報として設定される。
ファイルはプロセスによりアクセスされるが、
オープンしたファイルに対しては各プロセス毎で定義されるファイルディスクリプタ
(fd
> 0 ) という正の整数値が割り当てられ、
そのファイルディスクリプタを使用して実際のファイルアクセスを行なう。
プロセスの終了時には、オープンしたファイルはすべて自動的にクローズされる。
また、オープンしたファイルに対しては、 現在対象としているレコードを示す現在レコードが定義される。
ファイルディスクリプタ、現在レコード位置は、 そのプロセス固有のものとして定義され、子プロセスには特に継承されない。
プロセスの環境として作業ファイル、ユーザ管理情報は子プロセスに継承される。 また、デフォールトアクセスモードはユーザ毎に定義され、 変更した場合は同一ユーザーのすべてのプロセスに対して即時に有効となる。
ファイルには、 そのファイルを参照している同一ファイルシステム内の固定リンクの数を示す参照カウントが存在する。 参照カウントはファイルを生成した時点では 0 であり、 ファイルに対する固定リンクを生成した時点、 即ち、リンクをファイル内に格納した時点で +1 される。 逆に固定リンクが削除された時点で参照カウントは -1 される。
参照カウントは、同一ファイルシステム内での参照を示すため、 リンクファイルを経由したファイルの参照は、 参照カウントに反映されないことになる。 なお、リンクファイル自体にも参照カウントは適用される。
ファイルの削除は参照カウント 0 のファイルに対してのみ可能である。 削除したファイルに固定リンクが含まれていた場合は、 その固定リンクが参照しているファイルの参照カウントが -1 されるが、 その結果 0 となった場合でも、 そのファイルは削除されない。 なお、固定リンクが含まれているファイルの削除は、 削除時に強制削除の指定を行なった時のみ可能となる。
リンクファイルの削除も同様であり、 リンクファイル自体の参照カウントが 0 の場合に削除可能となる。 なお、リンクファイルの参照先のファイルは、リンクファイル経由で削除することはできない。
ファイルシステムのルートファイルは例外的に参照カウントが最初から 1 となっており、 決して削除することができないようになっている。
参照カウント 0 のファイルは、 そのファイルを参照する固定リンクを持たないため、 動的なリンクが失われてしまうと、通常の方法ではアクセスできないことになるが、 ファイルシステム内の全てのファイルに対するリンクを取り出す方法によりアクセスすることは可能である。
ファイルは、読込み(READ) / 書込み(WRITE) / 更新(UPDATE) のいずれかを指定してオープンするが、 オープン時に他からの同一ファイルの同時オープンを制限するための以下のモード指定が可能である。 デフォールトは共有モードとなるが、通常は排他書込モードとすることが安全である。
以下に既にオープンされているモードに対して新規に同時オープンできるモードの組み合わせを示す。 新規の同時オープンが不可の場合はオープン時にエラーとなる。
また、 オープンしたファイルのレコード単位で他からのアクセスを禁止するためのレコードロック機能が用意されている。
ロックしたレコードに対する他からのアクセスは以下のようになる。
既にロックされているレコードをロックしようとした場合はエラーとなるか、 またはロックが解かれるまで待たされることになる。
個々のファイルシステムに対して、以下の内容の管理情報を読み出すことができる。
typedef struct { H fs_bsize; /* 論理ブロックのバイト数 */ UH fs_nfile; /* 最大ファイル数 */ H fs_lang; /* ファイルシステムでの使用言語 */ H fs_level; /* ファイルシステムのアクセス管理レベル */ W fs_nblk; /* 全体のブロック数 */ W fs_nfree; /* 未使用ブロックの総数 */ STIME fs_mtime; /* 最新のシステムブロックの更新日時 */ STIME fs_ctime; /* ファイルシステムの生成日時 */ TC fs_name[L_FSNM]; /* ファイルシステム名 */ TC fs_locat[L_DLNM]; /* デバイス所在名 */ } FS_STATE;
fs_bsize
は 1 論理ブロックのバイト数であり、
2 のべき乗の値とする。
fs_nfile
はそのファイルシステムに登録可能な最大のファイル数を示す。
この値は、最大のファイルID + 1に等しい。
fs_lang
はファイルシステムでの使用言語を示し、
このファイルシステムで使用している文字コード体系を表わしている。
fs_level
は、
ファイルシステムのアクセス管理のレベルを表わすもので、以下の値をとる。
fs_nblk
はファイルシステム全体の論理ブロックの総数であり、
この値は論理ブロック番号の最大値 + 1 に等しい。
fs_nfree
は、
現時点の未使用論理ブロックの総数であり、
このデータは動的に変動する。
fs_mtime, fs_ctime
はそれぞれファイルシステムの最新更新日時と生成された日時で、
基準日(1985年1月1日00:00:00 GMT) からの秒数で表わす。
fs_name, fs_locat
は、
それぞれファイルシステムの生成時に設定される名称であり
20 文字に満たない場合は 0 が詰められている。
ファイルシステムの管理情報はファイルシステムの生成時
( フォーマット時 ) に設定され、
以後は未使用ブロックの総数 (fs_nfree
) と、
最新のシステムブロックの更新日時 ( fs_mtime
)、
ファイルシステム名、およびデバイス所在名を除いて変更されることはない。
個々のファイルに対して以下の内容の管理情報を読み出すことができる。 但し、リンクファイルの場合はリンクファイルが参照するファイルの管理情報となり、 リンクファイル自体の管理情報は読み出すことはできない。
typedef struct { UH f_type; /* ファイルタイプ/所有者アクセスモード */ UH f_atype; /* アプリケーションタイプ */ TC f_owner[L_USRNM]; /* ファイル所有者名 (隠し名は常に0) */ TC f_group[L_USRNM]; /* 所有グループ名 (隠し名は常に0) */ UH f_grpacc; /* グループアクセスレベル */ UH f_pubacc; /* 一般アクセスレベル */ H f_nlink; /* 含まれているリンク数 */ H f_index; /* インデックスレベル */ W f_size; /* ファイルの総バイト数 */ W f_nblk; /* 総使用論理ブロック数 */ W f_nrec; /* 総レコード数 */ STIME f_ltime; /* ファイルの保存期限(日時) */ STIME f_atime; /* 最新のアクセス日時 */ STIME f_mtime; /* 最新の更新日時 */ STIME f_ctime; /* ファイルの作成日時 */ } F_STATE;
f_type
はファイルのタイプ、アクセス属性、
所有者アクセスモードを示す以下のものである。
TTTT xxxx BAPO xRWE
アプリケーションタイプ ( f_atype
)
はアプリケーションが設定 / 使用するデータであり、
ファイル管理では使用しない。
}
所有者名 (f_owner
)、
所有グループ名 (f_group
)
はそれぞれ 12 文字であり、
12 文字以下の場合は 0 で埋められる。
続く2 文字の隠し名は常に 0 として得られる。
グループアクセスレベル(f_grpacc)、一般アクセスレベル(f_pubacc) は以下の構成となる。
xxxx RRRR WWWW EEEE
RRRR
:
WWWW
:
EEEE
:
xxxx
:
含んでいるリンク数は ( f_nlink
)
はそのファイルが含んでいるリンクレコードの数を示す。
インデックスレベルは 0 〜 のレコードインデックスの間接の多重度を示す。
ファイルの総バイト数 ( f_size
)
はファイル内に実際に書かれているデータの総バイト数であり、
各レコードのレコードサイズの合計となる。
この場合、
リンクレコードのレコードサイズは 0 としてカウントされる。
総使用論理ブロック数は、 そのファイルで使用している論理ブロックの総数を示す。
総レコード数は、そのファイル内に存在するレコードの総数を示す。
日時に関しては、1985年1月1日0:00 GMTからの秒数が設定される。 この値が -1 の場合にはそのデータは無効であることを示す。
f_atime
)
f_mtime
)
f_ctime
)
f_ltime
)
typedef struct { STIME fs_ctime; /* ファイルシステムの生成日時 */ TC fs_name[L_FSNM]; /* ファイルシステム名 */ TC fs_locat[L_DLNM]; /* デバイス所在名 */ TC fs_dev[L_DEVNM]; /* 論理デバイス名 */ } F_LOCATE;
typedef struct { STIME f_ctime; /* リンクファイル自体の生成日時 */ UH f_atype; /* 参照ファイルのアプリタイプ */ TC f_name[L_FNM]; /* 参照ファイル名 */ UH f_id; /* 参照ファイルID */ STIME rf_ctime; /* 参照ファイルの生成日時 */ TC fs_name[L_FSNM]; /* ファイルシステム名 */ TC fs_locat[L_DLNM]; /* ファイルシステムのデバイス所在名 */ } F_LINK;
ファイルをアクセスするために使用される、リンクは以下のデータ構造となる。
typedef struct { TC fs_name[L_FSNM]; /* ファイルシステム名 */ UH f_id; /* ファイル ID */ UH atr1; /* 属性データ1 */ UH atr2; /* 属性データ2 */ UH atr3; /* 属性データ3 */ UH atr4; /* 属性データ4 */ UH atr5; /* 属性データ5 */ } LINK;
ファイル管理ではファイルシステム名とファイルIDのみを使用して実際のファイルアクセスが行なわれる。
通常、リンクはファイル管理機能から得られたものを使用するが、 アプリケーションがファイルシステム名とファイルIDを直接設定してリンクを作成することも可能である。
例えばファイルシステムのルートファイルへのリンクは、ファイル ID = 0 であるため、 ファイルシステム名が判っていればアプリケーションで直接リンクを作成することが可能となる。
#define L_FSNM 20 /* ファイルシステム名 */ #define L_DLNM 20 /* デバイス所在名 */ #define L_DEVNM 8 /* 論理デバイス名 */ #define L_CONNM 8 /* 接続名 */ #define L_USRNM (12+2) /* ユーザ(グループ)名 + 隠し名 */ #define L_FNM 20 /* ファイル名 */ #define L_PATHNM 256 /* パス名 */
#define N_GRP 4 /* 所属グループ数 */
#define TC_FDLM 0xff21 /* '/' パス名の区切り */ #define TC_FSEP 0xff22 /* ':' 出現順の区切り */ #define TC_FOWN 0xff23 /* '≡' 自分自身(作業ファイル) */
#define F_NORM 0x0000 /* 通常指定 */ #define F_BASED 0x0001 /* ベース指定 */ #define F_DIRECT 0x0002 /* 直接取り出し指定 */
#define F_READ 0x0004 /* 読み込み専用オープン */ #define F_WRITE 0x0002 /* 書き込み専用オープン */ #define F_UPDATE 0x0006 /* 更新用(読込/書込)オープン */
#define F_EXCL 0x0100 /* 排他モード */ #define F_WEXCL 0x0200 /* 排他書き込みモード */
#define F_FLOAT 0x0000 /* 固定リンクとしない */ #define F_FIX 0x0001 /* 固定リンクとする */ #define F_FILEID 0x0002 /* ファイル ID 指定 */
#define F_FWD 0x0000 /* 前向きサーチ */ #define F_NFWD 0x0001 /* 前向きサーチ(次から) */ #define F_BWD 0x0002 /* 後向きサーチ */ #define F_NBWD 0x0003 /* 後向きサーチ(手前から) */ #define F_TOPEND 0x0004 /* 先頭から終端 */ #define F_ENDTOP 0x0005 /* 終端から先頭 */
#define F_SFILE 0x4000 /* 同一ファイル */ #define F_SNAME 0x2000 /* 同一ファイル名 */ #define F_SATR1 0x1000 /* 同一属性データ1 */ #define F_SATR2 0x0800 /* 同一属性データ2 */ #define F_SATR3 0x0400 /* 同一属性データ3 */ #define F_SATR4 0x0200 /* 同一属性データ4 */ #define F_SATR5 0x0100 /* 同一属性データ5 */
#define F_UNLOCK 0x0000 /* アンロック */ #define F_LOCK 0x0001 /* ロック */ #define F_TSLOCK 0x0002 /* テスト & ロック */ #define F_CKLOCK 0x0003 /* ロック状態のチェック */
#define F_READ 0x0004 /* R アクセス */ #define F_WRITE 0x0002 /* W アクセス */ #define F_EXCUTE 0x0001 /* E アクセス */ #define F_COMMON 0x0100 /* 共有メモリー空間にマップ */ #define F_SYSTEM 0x0300 /* システムメモリー空間にマップ */
#define F_READ 0x0004 /* R アクセスチェック */ #define F_WRITE 0x0002 /* W アクセスチェック */ #define F_EXCUTE 0x0001 /* E アクセスチェック */ #define F_EXIST 0x0000 /* ファイルの存在チェック */
#define F_PASWD 0x0008 /* パスワードの有無 */
#define F_SETRONLY 0x0001 /* 書込不可属性のセット */ #define F_RSTRONLY 0x0002 /* 書込不可属性のリセット*/ #define F_SETPERM 0x0003 /* 削除不可属性のセット */ #define F_RSTPERM 0x0004 /* 削除不可属性のリセット*/ #define F_SETA1 0x0005 /* アプリ属性1のセット */ #define F_RSTA1 0x0006 /* アプリ属性1のリセット */ #define F_SETA2 0x0007 /* アプリ属性2のセット */ #define F_RSTA2 0x0008 /* アプリ属性2のリセット */
#define FS_SYNC 0x0000 /* 同期指定 */ #define FS_ASYN 0x0002 /* 非同期指定 */ #define FS_RONLY 0x0001 /* 書き込み禁止 */
#define F_GETDEV (-1) /* 対応するデバイス名を得る */ #define F_GETNAM (-2) /* 対応する接続名を得る */
#define F_SYNC 0 /* 一致している */ #define F_DNAME 1 /* ファイル名が異なっていた */ #define F_DDATE 2 /* 生成日時が異なっていた */ #define F_DBOTH 3 /* ファイル名と生成日時が異なる */
typedef struct { TC fs_name[L_FSNM]; /* ファイルシステム名 */ UH f_id; /* ファイル ID */ UH atr1; /* 属性データ1 */ UH atr2; /* 属性データ2 */ UH atr3; /* 属性データ3 */ UH atr4; /* 属性データ4 */ UH atr5; /* 属性データ5 */ } LINK;
typedef struct { UH f_ownacc; /* 所有者アクセスモード */ UH f_grpacc; /* グループアクセスレベル */ UH f_pubacc; /* 一般アクセスレベル */ H f_grpno; /* グループ番号 */ } A_MODE;
typedef struct { UH f_ownacc; /* 所有者アクセスモード */ UH f_grpacc; /* グループアクセスレベル */ UH f_pubacc; /* 一般アクセスレベル */ H f_grpno; /* グループ番号 */ UH f_gacc[N_GRP]; /* グループアクセスレベル */ } DA_MODE;
typedef struct { STIME f_ltime; /* ファイルの保存期限(日時) */ STIME f_atime; /* 最新のアクセス日時 */ STIME f_mtime; /* 最新の更新日時 */ } F_TIME;
typedef struct { UH f_type; /* ファイルタイプ/所有者アクセスモード */ UH f_atype; /* アプリケーションタイプ */ TC f_owner[L_USRNM]; /* ファイル所有者名 (隠し名は常に0) */ TC f_group[L_USRNM]; /* 所有グループ名 (隠し名は常に0) */ UH f_grpacc; /* グループアクセスレベル */ UH f_pubacc; /* 一般アクセスレベル */ H f_nlink; /* 含まれているリンク数 */ H f_index; /* インデックスレベル */ W f_size; /* ファイルの総バイト数 */ W f_nblk; /* 総使用論理ブロック数 */ W f_nrec; /* 総レコード数 */ STIME f_ltime; /* ファイルの保存期限(日時) */ STIME f_atime; /* 最新のアクセス日時 */ STIME f_mtime; /* 最新の更新日時 */ STIME f_ctime; /* ファイルの作成日時 */ } F_STATE;
#define F_FILE 0x1000 /* 通常ファイル */
#define F_APLATR1 0x0040 /* アプリケーション属性1 */ #define F_APLATR2 0x0080 /* アプリケーション属性2 */ #define F_RONLY 0x0010 /* 書込不可属性 */ #define F_PERM 0x0020 /* 削除不可属性 */
#define F_OWNACC 0x0007 /* 所有者アクセス属性(RWE) */ #define F_OWNACR 0x0004 /* 所有者のRアクセス属性 */ #define F_OWNACW 0x0002 /* 所有者のWアクセス属性 */ #define F_OWNACE 0x0001 /* 所有者のEアクセス属性 */
#define F_NOCHG 0x8000 /* 変更しない */
typedef struct { STIME fs_ctime; /* ファイルシステムの生成日時 */ TC fs_name[L_FSNM]; /* ファイルシステム名 */ TC fs_locat[L_DLNM]; /* デバイス所在名 */ TC fs_dev[L_DEVNM]; /* 論理デバイス名 */ } F_LOCATE;
typedef struct { STIME f_ctime; /* リンクファイル自体の生成日時 */ UH f_atype; /* 参照ファイルのアプリタイプ */ TC f_name[L_FNM]; /* 参照ファイル名 */ UH f_id; /* 参照ファイルID */ STIME rf_ctime; /* 参照ファイルの生成日時 */ TC fs_name[L_FSNM]; /* ファイルシステム名 */ TC fs_locat[L_DLNM]; /* ファイルシステムのデバイス所在名 */ } F_LINK;
typedef struct { H fs_bsize; /* 論理ブロックのバイト数 */ UH fs_nfile; /* 最大ファイル数 */ H fs_lang; /* ファイルシステムでの使用言語 */ H fs_level; /* ファイルシステムのアクセス管理レベル */ W fs_nblk; /* 全体のブロック数 */ W fs_nfree; /* 未使用ブロックの総数 */ STIME fs_mtime; /* 最新のシステムブロックの更新日時 */ STIME fs_ctime; /* ファイルシステムの生成日時 */ TC fs_name[L_FSNM]; /* ファイルシステム名 */ TC fs_locat[L_DLNM]; /* デバイス所在名 */ } FS_STATE;
#define F_JPN 0x0021 /* 日本語 (日本語文字族) */ #define F_ENG 0x0080 /* 英語 (ラテン文字族1) */
typedef struct { TC a_name[L_CONNM]; /* 接続名 */ TC dev[L_DEVNM]; /* 論理デバイス名 */ } F_ATTACH;
関数のパラメータの説明では、以下に示す記述方法を使用している。
( x ‖ y ‖ z ) -- x, y, z のいずれか1つを意味する。 | -- OR で指定可能なことを意味する。 [ ] -- 省略可能なことを意味する。
例: mode := (F_NORM ‖ F_BASED) | [F_DIRECT] の場合、 mode の指定は、以下の 4 種のいずれか 1 つとなる。 F_NORM F_BASED F_NORM | F_DIRECT F_BASED | F_DIRECT
|
WERR get_lnk(TC *path, LINK *lnk, W mode)
TC *path 対象パス名 NULL 作業ファイルを対象 LINK *lnk 獲得したリンクの格納領域 (出力) 作業ファイル指定 (入力:F_BASED 指定時) W mode リンク獲得モード ( F_NORM ‖ F_BASED ) | [ F_DIRECT ] F_NORM 通常指定 F_BASED 作業ファイル指定 F_DIRECT 直接リンク獲得指定
=0 正常(通常ファイルのリンク) =1 正常(リンクファイルのリンク:F_DIRECT 指定なし) =2 正常(リンクファイルが参照する通常ファイルのリンク:F_DIRECT 指定時) <0 エラー(エラーコード)
パス名で指定したファイルのリンクを獲得する。
パス名の指定が NULL
の時は現在の作業ファイルのリンクを獲得する。
パス名が相対パス名のとき、F_NORM
指定のときは現在の作業ファイルをベースとするが、
F_BASED
指定のときは lnk
で指定したファイルを作業ファイルとみなしてベースとする。
指定したファイルがリンクファイルのとき、
F_DIRECT
指定なしのときはリンクファイル自体へのリンクを獲得する。
このとき、得られたリンクファイルが参照する通常ファイルの存在は保証されない。
F_DIRECT
指定のときはリンクファイルが参照する通常ファイルへの直接のリンクを獲得する。
ファイルのリンクを取り出すためには、 パス名に含まれる各ファイルに対しての実行 / サーチ(E)アクセス権が必要となるが、 対象ファイル自体の実行 / サーチ(E)アクセス権は必要ない。
ER_ACCES : パス名(path)内の経路ファイルのアクセス権(E)がない。 ER_ADR : アドレス(path,lnk)のアクセスは許されていない。 ER_FNAME : パス名(path)が空、不正、または長すぎる。 ER_IO : 入出力エラーが発生した。 ER_NOFS : パス名(path)内のファイル、リンクファイルの参照ファイル (F_DIRECT指定時)の属するファイルシステムは接続されていない。 ER_NOEXS : パス名(path)内のファイル、リンクファイルの参照ファイル (F_DIRECT指定時)は存在していない、または作業ファイルが未定義。 ER_NOSPC : システムのメモリ領域が不足した。 ER_PAR : パラメータが不正である(mode が不正)。
|
ERR chg_wrk(LINK *lnk)
LINK *lnk 変更する作業ファイル NULL 作業ファイルを未定義とする
=0 正常 <0 エラー(エラーコード)
指定したファイルを自プロセスの作業ファイルとする。
作業ファイルとするためには、そのファイルに対しての実行 / サーチ(E)アクセス権が必要となる。
ER_ACCES : ファイル(lnk)のアクセス権(E)がない。 ER_ADR : アドレス(lnk)のアクセスは許されていない。 ER_IO : 入出力エラーが発生した。 ER_NOEXS : ファイル(lnk)は存在していない。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOSPC : システムのメモリ領域が不足した。
|
WERR cre_fil(LINK *lnk, TC *name, A_MODE *mode, UH atype, W opt)
LINK *lnk 生成したファイルのリンク格納領域(出力) ファイルシステム指定 (入力:F_FLOAT 指定時) 親ファイル指定 (入力:F_FIX 指定時) 生成ファイル指定 (入力:F_FILEID 指定時) TC *name ファイル名(0または最大ファイル名文字数まで有効) A_MODE *mode アクセスモード NULL デフォールトアクセスモード適用 UH atype ファイルアプリケーションタイプ W opt 生成属性 ( FLOAT ‖ F_FIX ‖ F_FILEID ) F_FLOAT 浮動リンク指定 F_FIX 固定リンク指定 F_FILEID ファイルID指定
>0 正常(ファイルディスクプリタ) <0 エラー(エラーコード)
lnk
で指定したファイル
( リンクファイルのときはリンクファイルが参照する通常ファイル )
が存在するファイルシステム上に新規に通常ファイルを生成し、
更新用にオープンする。
生成したファイルのリンクの属性データはすべて 0 に設定され、
lnk
で指定した領域に格納される。
F_FLOAT
指定のときは、単純にファイルを生成する。
生成したファイルの参照カウントは 0 となる。
この場合、lnk
で指定した内容のファイルシステム名のみが有効でありファイルIDは無視されるため
lnk
で指定したファイルは存在していなくてもよい。
F_FIX
指定のときは、生成したファイルのリンクを
lnk
で指定したファイルの最後のレコード位置にリンクレコード
(サブタイプ = 0 ) として追加る。
生成したファイルの参照カウントは 1 となる。
この場合、lnk で指定したファイルは存在し、
かつ書き込みオープンできなくてはいけない。
F_FILEID
指定のときは、lnk
で指定した内容のファイルIDと同じファイルIDのファイルを生成する。
生成したファイルの参照カウントは 0 となる。
この場合、lnk
で指定したファイルは存在していてはいけない。
A_MODE
は生成したファイルのアクセスモードを指定する。
ファイルの所有者はファイルを生成したプロセスのユーザとなる。
生成したファイルの所有者アクセスモードが書き込み不可のときでも、 ファイルは更新用にオープンされる。 この状態ではレコードは 1 つも存在しないため現在レコードは終端レコードであり、 そのレコード番号は0となる。
ER_ACCES : ファイル(lnk)のアクセス権(W)がない(F_FIX指定時)。 ER_ADR : アドレス(lnk,name,mode)のアクセスは許されていない。 ER_BUSY : ファイル(lnk)は既に排他的にオープンされている為、 同時にファイルをオープンすることができなかった(F_FIX指定時)。 ER_EXS : ファイル(lnk)は既に存在している(F_FILEID指定時)。 ER_FNAME : ファイル名(name)は空または不正である。 ER_IO : 入出力エラーが発生した。 ER_LIMIT : 最大ファイル数を越えた、 または同時オープン可能な最大ファイル数を越えた。 ER_NODSK : ディスクの領域が不足した。 ER_NOEXS : ファイル(lnk)は存在していない(F_FIX指定時)。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_PAR : パラメータが不正である(f_grpno<0,>4 ,opt が不正)。 ER_RONLY : ファイル(lnk)は書込不可である、 または属するファイルシステムは書込不可である。 ER_SZOVR : ファイル(lnk)のサイズがシステムの制限を越えた(F_FIX指定時)。
|
ERR cre_lnk(LINK *lnk, F_LINK *ref, W opt)
LINK *lnk 生成したファイルのリンク格納領域(出力) ファイルシステム指定 (入力:F_FLOAT 指定時) 親ファイル指定 (入力:F_FIX 指定時) 生成ファイル指定 (入力:F_FILEID 指定時) F_LINK *ref 生成するリンクファイルの内容 W opt 生成属性 ( F_FLOAT ‖ F_FIX ‖ F_FILEID )
F_FLOAT
:
生成したリンクファイルのリンクを単に lnk
に戻す。
この場合、
生成したリンクファイルの参照カウントは 0 となる。
この指定を行なった場合は、lnk
のファイルシステム名のみが使用され、
ファイルIDで示されるファイルは実際に存在しなくてもよい。
F_FIX
:
生成したリンクファイルのリンクを、
lnk
で指定したファイルの適当な位置のレコードとして追加する。
追加されるレコードの位置は保証されない。
この場合、
生成したリンクファイルの参照カウントは 1 となる。
追加されるリンクレコードのサブタイプは 0 であり、
属性データはすべて 0 となる。
この指定を行なった場合は、lnk
で指定したファイルは存在し、
かつ F_WRITE
オープンできなくてはいけない。
F_FILEID
:
lnk
で指定したファイルIDを持つリンクファイルを生成し、
生成したリンクファイルのリンクを単に lnk
に戻す。
この場合、生成したリンクファイルの参照カウントは 0 となる。
この指定を行なった場合は、lnk
で指定したファイルIDを持つファイルが既に存在していた場合(リンクファイルも含む)は、
エラー ( ER_EXS
) となる。
=0 正常 <0 エラー(エラーコード)
lnk
で指定したファイル
( リンクファイルのときはリンクファイルが参照する通常ファイル )
が存在するファイルシステム上に新規に ref
で指定した内容のリンクファイルを生成する。
生成したリンクファイルのリンクの属性データはすべて 0 に設定され、
lnk
で指定した領域に格納される。
F_FLOAT, F_FIX, F_FILEID
の意味は cre_fil()
と同一である。
生成したリンクファイルの内容は ref
で指定した内容となるが、
その生成日時は、ref->f_ctime
ではなく、
本システムコールを実行した日時となる。
ref
で指定したファイルの実際の存在はチェックされない。
ref->fs_name
が lnk
で指定したファイルシステム名と同一のときはリンクファイルは生成できないためエラーとなる。
ER_ACCES : ファイル(lnk)のアクセス権(W)がない(F_FIX指定時)。 ER_ADR : アドレス(lnk,ref)のアクセスは許されていない。 ER_BUSY : ファイル(lnk)は既に排他的にオープンされている為、同時にファイルを オープンすることができなかった(F_FIX指定時)。 ER_EXS : ファイル(lnk)は既に存在している(F_FILEID指定時)。 ER_FNAME : ファイル名(ref->f_name)ファイルシステム名(ref->fs_name) は空または不正である。 ER_IO : 入出力エラーが発生した。 ER_LIMIT : 最大ファイル数を越えた。 ER_NODSK : ディスクの領域が不足した。 ER_NOEXS : ファイル(lnk)は存在していない(F_FIX指定時)。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_PAR : パラメータが不正である(opt が不正、同一ファイルシステム)。 ER_RONLY : ファイル(lnk)は書込不可である、 または属するファイルシステムは書込不可である(F_FIX指定時)。 ER_SZOVR : ファイル(lnk)のサイズがシステムの制限を越えた(F_FIX指定時)。
|
WERR gen_fil(LINK *lnk, TC *name, F_STATE *stat, F_LINK *ref, W opt)
LINK *lnk 生成したファイルのリンク格納領域(出力) ファイルシステム指定 (入力:F_FLOAT 指定時) 親ファイル指定 (入力:F_FIX 指定時) 生成ファイル指定 (入力:F_FILEID 指定時) TC *name ファイル名(0または最大ファイル文字数まで有効) (通常ファイル生成時のみ有効で、このとき name が NULL ならばエラーとなる) (リンクファイルの生成の場合は一切参照されない) F_STATE *stat 生成するファイルの内容 F_LINK *ref 生成するリンクファイルの内容 (リンクファイル生成時のみ有効) W opt 生成属性 ( F_FLOAT ‖ F_FIX ‖ F_FILEID ) F_FLOAT 浮動リンク指定 F_FIX 固定リンク指定 F_FILEID ファイルID指定
>0 正常(ファイルディスクプリタ:通常ファイル生成時) =0 正常(リンクファイル生成時) <0 エラー(エラーコード)
lnk
で指定したファイル
( リンクファイルのときはリンクファイルが参照する通常ファイル )
が存在するファイルシステム上に新規に通常ファイルまたはリンクファイルを生成し、
通常ファイルのときは更新用にオープンする。
生成したリンクファイルのリンクの属性データはすべて 0 に設定され、
lnk
で指定した領域に格納される。
F_FLOAT, F_FIX, F_FILEID
の意味は cre_fil()
と同一である。
生成したファイルの内容は stat
で指定し、
stat->f_type
により通常ファイルかリンクファイルか区別される。
通常ファイル生成のときは、name
で指定した名前の通常ファイルを生成し、生成したファイルの管理情報を
stat
で指定した内容に設定する。
ただし、f_nlink, f_index, f_size, f_nblk, f_nrec
の値は無視されファイルの生成時に初期化される。
リンクファイル生成のときは、stat
の他の内容はすべて無視され、
ref
の内容のリンクファイルを生成する、
cre_lnk()
と同様の動作であるが、
ref->f_ctime
も有効となる。
本システムコールはファイルシステムの復元などの特殊な用途に使用されるため、 ユーザレベル 0 のプロセスでのみ実行可能である。
通常ファイルを生成したときはファイルは更新用にオープンされる。 この状態ではレコードは 1 つも存在しないため現在レコードは終端レコードであり、 そのレコード番号は 0 となる。
ER_ACCES : レベル0のユーザでない。 ER_ADR : アドレス(lnk,ref,name,stat)のアクセスは許されていない。 ER_BUSY : ファイル(lnk)は既に排他的にオープンされている為、同時にファイルを オープンすることができなかった(F_FIX指定時)。 ER_EXS : ファイル(lnk)は既に存在している(F_FILEID指定時)。 ER_FNAME : ファイル名(name)、ファイル名(ref->f_name)、 ファイルシステム名(ref->fs_name)は空または不正である。 ER_IO : 入出力エラーが発生した。 ER_LIMIT : 最大ファイル数を越えた、または同時オープン可能な最大ファイル数を 越えた。 R_NODSK : ディスクの領域が不足した。 ER_NOEXS : ファイル(lnk)は存在していない。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_PAR : パラメータが不正である (opt が不正、同一ファイルシステム、ref, stat の内容が不正)。 ER_RONLY : ファイル(lnk)は書込不可である、 または属するファイルシステムは書込不可である。 ER_SZOVR : ファイル(lnk)のサイズがシステムの制限を越えた(F_FIX指定時)。
|
WERR opn_fil(LINK *lnk, W o_mode, TC *pwd)
LINK *lnk 対象ファイル W o_mode オープンモード ( F_READ ‖ F_WRITE ‖ F_UPDATE ) | [ F_EXCL ‖ F_WEXCL ] F_READ 読み込み用オープン F_WRITE 書き込み用オープン F_UPDATE 更新(読み込み/書き込み)用オープン F_EXCL 排他モード F_WEXCL 排他書き込みモード TC *pwd パスワード NULL パスワード指定なし
>0 正常(ファイルディスクリプタ) <0 エラー(エラーコード)
lnk
で指定したファイルを指定したモードでオープンする。
ファイルをオープンするためにはオープンモードに対応するアクセス権が必要である。
pwd
はファイルにパスワードが設定されている場合に有効であり、
パスワードが一致しない場合はエラーとなる。
オープンしたファイルの先頭レコードが現在レコードとなる。 レコードが 1 つも存在しないときは終端レコードが現在レコードとなる。
ER_ACCES : ファイル(lnk)のアクセス権(o_modeに対応)がない。 ER_ADR : アドレス(lnk,pwd)のアクセスは許されていない。 ER_BUSY : ファイル(lnk)は既に排他的にオープンされている為、同時にファイルを オープンすることができなかった。 ER_IO : 入出力エラーが発生した。 ER_LIMIT : 同時オープン可能な最大ファイル数を越えた。 ER_NOEXS : ファイル(lnk)は存在していない。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_PAR : パラメータが不正である(o_modeが不正)。 ER_PWD : ファイル(lnk)の合言葉が不一致である。 ER_RONLY : ファイル(lnk)は書込不可である、 または属するファイルシステムは書込不可である。
|
ERR cls_fil(W fd)
W fd ファイルディスクリプタ
=0 正常 <0 エラー(エラーコード)
オープンしたファイルをクローズする。
ファイルをオープンしたプロセスが終了したときには、自動的にそのファイルはクローズされる。
ER_FD : ファイルディスクリプタは存在していない。 ER_IO : 入出力エラーが発生した。
|
WERR del_fil(LINK *org, LINK *lnk, W force)
LINK *org 削除対象ファイルの親ファイル NULL 親ファイル指定なし LINK *lnk 削除対象ファイル W force 強制削除指定
≧0 正常(削除した結果参照カウント0となったリンクレコードの数) <0 エラー(エラーコード)
org
で指定した親ファイル内の
lnk
で指定したファイルを示すリンクレコードを削除し、
そのファイルの参照カウントを -1 する。
その結果、参照カウントが 0 になった場合には、lnk
で指定されたファイル自体を削除する。
この場合、親ファイルの書き込み(W)アクセス権が必要となる。
親ファイルの指定なし ( org = NULL
) のときは、
lnk
で指定したファイルの参照カウントが 0
の場合にファイルを削除する。
参照カウントが 0 でない場合はエラーとなる。
削除対象ファイルががリンクファイルのときは、 リンクファイル自体が削除の対象となり、 リンクファイルの参照先のファイルは削除されることはない。
削除対象ファイルが以下のいずれかのときは削除されずにエラーとなる。
書込不可属性がセットされていた場合でも削除可能である。
ER_ACCES : ファイル(org)のアクセス権(W)がない(org≠NULLの時)。 ER_ADR : アドレス(org,lnk)のアクセスは許されていない。 ER_BUSY : ファイル(org)は既に排他的にオープンされている為、 同時にファイルをオープンすることができなかった(org≠NULLの時)。 : ファイル(lnk)はオープン中である、または作業ファイルである。 : ファイル(lnk)の参照カウントは0でない(org=NULLの時)。 : ファイル(lnk)を示すリンクレコードは他のオープンで現在レコード として使用されている(org=NULLの時)。 ER_IO : 入出力エラーが発生した。 ER_LOCK : ファイル(lnk)を示すリンクレコードは、他からロックされている (org≠ NULLの時)。 ER_NOEXS : ファイル(org,lnk)は存在していない(または、org内に指定された ファイル(lnk)を示すリンクレコードが存在しない)。 ER_NOFS : ファイル(org,lnk)の属するファイルシステムは接続されていない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_PERM : ファイル(lnk)は削除不可である(削除不可属性がセットされている)。 ER_REC : ファイル(lnk)は リンクレコードを含んでいる(force=0の時)。 ER_RONLY : ファイル(org)は書込不可である、 または属するファイルシステムは書込不可である(org≠NULLの時)。 : ファイル(lnk)の属するファイルシステムは書込不可である。
|
ERR see_rec(W fd, W offset, W mode, W *recnum)
W fd ファイルディスクリプタ W offset 移動オフセット W mode 移動モード =0 現在レコード番号 + offset のレコード番号位置に移動。 >0 offset のレコード番号位置に移動。 offset≧0でなくてはいけない。 <0 終端レコード番号 + offset のレコード番号位置に移動。 offset≦0でなくてはいけない。 W *recnum 移動後の現在レコード番号の格納領域 NULL 格納しない
=0 正常 <0 エラー(エラーコード)
オープンしたファイルの現在レコード位置を指定した位置に移動する。
定した移動先が存在するレコードの範囲を越える場合はエラーとなり、 現在レコードは変化しない。
ER_ADR : アドレス(recnum)のアクセスは許されていない。 ER_FD : ファイルディスクリプタは存在していない。 ER_IO : 入出力エラーが発生した。 ER_REC : 存在するレコードの範囲を越えた。
|
WERR fnd_rec(W fd, W mode, UW typemask, UH subtype, W *recnum)
W fd ファイルディスクリプタ W mode 検索モード(検索開始位置/方向の指定) ( F_FWD ‖ F_NFWD ‖ F_BWD ‖ F_NBWD ‖ F_TOPEND ‖ F_ENDTOP ) F_FWD 現在レコードから終端レコードまで F_NFWD 現在レコードの次のレコードからから終端レコードまで F_BWD 現在レコードから先頭レコードまで F_NBWD 現在レコードの前のレコードから先頭レコードまで F_TOPEND 先頭レコードから終端レコードまで F_ENDTOP 終端レコードから先頭レコードまで UW typemask 検索対象レコードタイプのビットマスク LSB タイプ 0 に対応 MSB タイプ 31 に対応 UH subtype 検索対象レコードサブタイプ 0 全サブタイプが対象(サブタイプのチェックなし) W *recnum 検索結果の現在レコード番号の格納領域 NULL 格納しない
≧0 正常(検索したレコードタイプ) <0 エラー(エラーコード)
オープンしたファイル内の指定したレコードを検索し、見つけたレコードを現在レコードとする。
対象レコードが見つからなかったときはエラーとなり、現在レコードは変化しない。
ER_ADR : アドレス(recnum)のアクセスは許されていない。 ER_FD : ファイルディスクリプタは存在していない。 ER_IO : 入出力エラーが発生した。 ER_PAR : パラメータが不正である(modeが不正)。 ER_REC : 指定した検索条件に合うレコードは存在しない (typemask=0の場合も含む)。
|
ERR fnd_lnk(W fd, W mode, LINK *lnk, UH subtype, W *recnum)
W fd ファイルディスクリプタ W mode 検索モード(検索開始位置/方向/内容の指定) ( F_FWD ‖ F_NFWD ‖ F_BWD ‖ F_NBWD ‖ F_TOPEND ‖ F_ENDTOP ) | [ F_SFILE ] | [ F_SNAME ] | [ F_SATR1 ] | [ F_SATR2 ] | [F_SATR3 ] | [ F_SATR4 ] | [ F_SATR5 ] F_FWD〜F_ENDTOP fnd_rec()と同じ F_SFILE lnk と同一のファイルを示すリンクレコード F_SNAME lnk と同一のファイル名のファイルを示すリンクレコード F_SATR1 lnk と同一の属性データ1を持つリンクレコード F_SATR2 lnk と同一の属性データ2を持つリンクレコード F_SATR3 lnk と同一の属性データ3を持つリンクレコード F_SATR4 lnk と同一の属性データ4を持つリンクレコード F_SATR5 lnk と同一の属性データ5を持つリンクレコード LINK *lnk 検索対象リンク F_SFILE〜F_SATR5 を指定したときのみ有効 UH subtype 検索対象レコードサブタイプ 0 全サブタイプが対象(サブタイプのチェックなし) W *recnum 検索結果の現在レコード番号の格納領域 NULL 格納しない
=0 正常 <0 エラー(エラーコード)
オープンしたファイル内の指定したリンクレコードを検索し、 見つけたリンクレコードを現在レコードとする。
対象レコードが見つからなかったときはエラーとなり、現在レコードは変化しない。
ER_ADR : アドレス(lnk,recnum)のアクセスは許されていない (lnkは検索条件を指定した場合のみアクセスされる)。 ER_FD : ファイルディスクリプタは存在していない。 ER_IO : 入出力エラーが発生した。 ER_NOSPC : システムのメモリ領域が不足した。 ER_NOEXS : ファイル(lnk)は存在していない。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_PAR : パラメータが不正である(mode が不正)。 ER_REC : 指定した検索条件に合うレコードは存在しない。
|
WERR rea_rec(W fd, W offset, B *buf, W size, W *r_size, UH *subtype)
W fd ファイルディスクリプタ W offset 読み込み開始バイト位置(≧0) B *buf 読み込みデータ格納領域 NULL 格納しない W size 読み込みデータ格納領域のバイトサイズ(≧0) W *r_size 開始バイト位置からの残りバイトサイズ (レコードサイズ − offset)の格納領域 NULL 格納しない UH *subtype レコードサブタイプの格納領域 NULL 格納しない
≧0 正常(現在レコードのレコードタイプ) <0 エラー(エラーコード)
オープンしたファイルの現在レコードを読み込む。
レコードサイズ < offset + size
のときは、
buf
には ( レコードサイズ - offset)
バイトのデータのみ読み込まれて格納される。
offset ≧ レコードサイズ
、buf = NULL
、
または size = 0
のときは buf
には何も格納されずに
*r_size、*subtype
に対応する値が格納される。
これは、レコードサイズやサブタイプのみを取り出す場合に使用される。
現在レコードがリンクレコードのときは、
LINK
構造体全体の内容が
buf
に読み出され、*r_size
には
LINK
構造体のサイズが格納される。
この場合、offset = 0
、size ≧ LINK
構造体のサイズ ( または size = 0
)
でなくてはいけない。
現在レコードが終端レコードのとき、 または他プロセスからロックされているときはエラーとなる。
ER_ADR : アドレス(buf,r_size,subtype)のアクセスは許されていない。 ER_ENDR : 現在レコードは終端レコードである。 ER_FD : ファイルディスクリプタは存在していない、 または F_WRITE オープンである。 ER_IO : 入出力エラーが発生した。 ER_LOCK : 現在レコードは他からロックされている。 ER_PAR : パラメータが不正である(size<0,offset<0, リンクレコードでoffset,sizeが不正)。
|
ERR wri_rec(W fd, W offset, B *buf, W size, W *r_size, UH *subtype, UW units)
W fd ファイルディスクリプタ W offset 書き込み開始バイト位置(−1≦ offset < レコードサイズ) -1:レコードの最後への書き込み(追加) B *buf 書き込みデータへのポインタ NULL 書き込まない W size 書き込みデータのバイトサイズ(≧0) W *r_size 開始バイト位置からの残りバイトサイズ (書き込み後のレコードサイズ − offset)の格納領域 NULL 格納しない UH *subtype 変更するレコードサブタイプへのポインタ NULL 変更しない UW units ブロック獲得単位(Kバイト) 0 任意
=0 正常 <0 エラー(エラーコード)
オープンしたファイルの現在レコードに書き込む。
レコードサイズ < offset + size
のときは、
書き込み後にレコードサイズは増加する。
units
はレコードサイズが増加したために必要となった追加ブロックの獲得の単位をKバイト単位で指定するもので、units
サイズ以上 ( size
以下 )
の連続ブロック領域を割り当てることを指定する。
units = 0
はブロックの割り当て方法は任意であることを意味する。
size = 0
、または buf = NULL
のときは、
データの書き込みは行なわないが
subtype ≠ NULL
であればレコードサブタイプは変更する。
buf = NULL
で レコードサイズ < offset + size
のときは、レコードサイズを増加するが増加した部分のデータは不定となる。
これは units
指定と組み合わせてレコードの追加ブロック領域をあらかじめ確保するときに使用する。
offset = -1
のときは、
常にその時点のレコードの最後にデータを書き込み、*r_size
には size
の値が格納される。
同一レコードを複数のプロセスがオープンして同時に書き込む場合でもこの指定により別のプロセスが書き込んだデータを上書きしないことが保証される。
現在レコードがリンクレコードのときは buf
の内容は LINK
構造体となるが、属性データ部分のみが書き込まれ、
参照するファイル自体を変更することはできない。
この場合、offset = 0
、size ≧ LINK 構造体のサイズ
( または size = 0
)でなくてはいけない。
現在レコードが終端レコードのとき、 または他プロセスからロックされているときはエラーとなる。
ER_ADR : アドレス(buf,r_size,subtype)のアクセスは許されていない。 ER_ENDR : 現在レコードは終端レコードである。 ER_FD : ファイルディスクリプタは存在していない、または F_READ オープンである。 ER_IO : 入出力エラーが発生した。 ER_LOCK : 現在レコードは他からロックされている。 ER_NODSK : ディスクの領域が不足した、または指定された連続ブロック領域が獲得 できなかった。 ER_PAR : パラメータが不正である(size<0,offsetが不正,リンクレコードで offset,sizeが不正)。 ER_SZOVR : ファイルのサイズがシステムの制限を越えた。
|
ERR ins_rec(W fd, B *buf, W size, W type, UH subtype, UW units)
W fd ファイルディスクリプタ B *buf 挿入レコードのデータへのポインタ NULL データは書き込まない W size 挿入レコードのバイトサイズ(≧0) W type 挿入レコードのレコードタイプ UH subtype 挿入レコードのレコードサブタイプ UW units ブロック獲得単位(Kバイト) 0 任意
=0 正常 <0 エラー(エラーコード)
オープンしたファイルの現在レコードの直前に新規のレコードを挿入する。
units
は挿入したレコードで必要とするブロックの獲得の単位を K
バイト単位で指定するもので、units
サイズ以上 ( size
以下 )
の連続ブロック領域を割り当てることを指定する。
units = 0
はブロックの割り当て方法は任意であることを意味する。
buf = NULL
のときは、挿入したレコードのサイズは
size
となるが、そのデータは不定となる。
これは units
指定と組み合わせて、
レコードのブロック領域をあらかじめ確保するために使用する。
現在レコードがリンクレコードのときは buf
の内容は LINK
構造体となるが、
属性データ部分のみが書き込まれ、参照するファイル自体を変更することはできない。
この場合、offset = 0
、size ≧LINK 構造体のサイズ
(または size = 0
) でなくてはいけない。
type = 0
のときはリンクレコードの挿入であり、
buf
の内容は LINK
構造体となる。
リンクレコードの挿入により、そのリンクの示すファイルの参照カウントは +1 される。
この場合、buf ≠ NULL
、size = LINK 構造体のサイズ
、
かつリンクの示すファイルは同一ファイルシステム上に存在していなくてはいけない。
ER_ADR : アドレス(buff)のアクセスは許されていない。 ER_FD : ファイルディスクリプタは存在していない、 または F_READ オープンである。 ER_IO : 入出力エラーが発生した。 ER_LIMIT : リンクの参照先のファイルの参照カウントがシステムの制限(255)を越えた。 ER_NODSK : ディスクの領域が不足した、または指定された連続ブロック領域が 獲得できなかった。 ER_NOEXS : リンクの参照先のファイルは存在していない。 ER_PAR : パラメータが不正である(type が不正、size<0、units が不正、 type=0の時の size,buff が不正)。 ER_REC : リンクは別ファイルシステムを参照している。 ER_SZOVR : ファイルのサイズがシステムの制限を越えた。
|
ERR apd_rec(W fd, B *buf, W size, W type, UH subtype, UW units)
W fd ファイルディスクリプタ B *buf 追加レコードのデータへのポインタ NULL データは書き込まない W size 追加レコードのバイトサイズ(≧0) W type 追加レコードのレコードタイプ U subtype 追加レコードのレコードサブタイプ UW units ブロック獲得単位(Kバイト) 0 任意
=0 正常 <0 エラー(エラーコード)
オープンしたファイルの最後に新規のレコードを挿入する。
本システムコールは、現在レコードの位置の関係なく常に最後のレコード
( 終端レコードの直前 ) にレコードを挿入する点を除いて ins_rec()
と同一である。
ER_ADR : アドレス(buff)のアクセスは許されていない。 ER_FD : ファイルディスクリプタは存在していない、または F_READ オープンである。 ER_IO : 入出力エラーが発生した。 ER_LIMIT : リンクの参照先のファイルの参照カウントがシステムの制限 (255)を越えた。 ER_NODSK : ディスクの領域が不足した、または指定された連続ブロック領域 が獲得できなかった。 ER_NOEXS : リンクの参照先のファイルは存在していない。 ER_PAR : パラメータが不正である(type が不正、size<0、units が不正、 type =0の時の size,buff が不正)。 ER_REC : リンクは別ファイルシステムを参照している。 ER_SZOVR : ファイルのサイズがシステムの制限を越えた。
|
WERR del_rec(W fd)
W fd ファイルディスクリプタ
=1 正常(リンクレコードを削除した結果、参照カウント=0となった) =0 正常(上記以外)
<0 エラー(エラーコード)
オープンしたファイルの現在レコードを削除し、 削除した次のレコードに現在レコードをを移動する。
削除したレコードがリンクレコードのときは、 リンクレコードが示すファイルの参照カウントは -1 され、 その結果参照カウントが0となった場合はリターン値は 1 となる。
現在レコードが終端レコードのとき、 他プロセスからロックされているとき、 または他のオープンで現在レコードとなっているときはエラーとなる。
ER_BUSY : 他のオープンで現在レコードとして使用されている。 ER_ENDR : 現在レコードは終端レコードである。 ER_FD : ファイルディスクリプタは存在していない、 または F_READ オープンである。 ER_IO : 入出力エラーが発生した。 ER_LOCK : 現在レコードは他からロックされている。 ER_NOSPC : システムのメモリ領域が不足した。
|
ERR trc_rec(W fd, W size)
W fd ファイルディスクリプタ W size 縮小するレコードバイトサイズ(≧0)
=0 正常 <0 エラー(エラーコード)
オープンしたファイルの現在レコードのレコードサイズを
size
バイトに縮小する。
レコードサイズ≦ size
のときは何もしない。
現在レコードが終端レコードのとき、 リンクレコードのとき、または他プロセスからロックされているときはエラーとなる。
ER_ENDR : 現在レコードは終端レコードである。 ER_FD : ファイルディスクリプタは存在していない、 または F_READ オープンである。 ER_IO : 入出力エラーが発生した。 ER_LOCK : 現在レコードは他からロックされている。 ER_PAR : パラメータが不正である(size<0)。 ER_REC : 現在レコードはリンクレコードである。
|
ERR xch_fil(W fd_1, W fd_2)
W fd_1 ファイルディスクリプタ 1 W fd_2 ファイルディスクリプタ 2
=0 正常 <0 エラー(エラーコード)
オープンした 2 つのファイルの内容を交換する。
交換するのはファイルのデータ部分であり、 ファイルの管理情報はアクセス日付と更新日付を除いて元のままとなる。
交換する 2 つのファイルは、同一のファイルシステムに存在し、 かつ排他モードで更新用オープンしてなくてはいけない。
交換後の現在レコードは、それぞれ先頭レコードとなる。
ER_FD : ファイルディスクリプタは存在していない、または (F_UPDATE|F_EXCL) でない オープンである。 ER_IO : 入出力エラーが発生した。 ER_LOCK : 現在レコードは他からロックされている (レコードにロックがかかっている)。 ER_NOSPC : システムのメモリ領域が不足した。 ER_PAR : パラメータが不正である(fd_1とfd_2は同一ファイル)。 ER_XFS : ファイル(fd_1,fd_2)は異なるファイルシステムに属している。
|
ERR loc_rec(W fd, W mode)
W fd ファイルディスクリプタ W mode ロックモード ( F_UNLOCK ‖ F_LOCK ‖ F_TSLOCK ‖ F_CKLOCK ) F_LOCK ロック設定(待ち) F_UNLOCK ロック解除 F_TSLOCK ロック設定(待ちなし) F_CKLOCK ロック状態チェック
=0 正常 <0 エラー(エラーコード)
オープンしたファイルの現在レコードに対するロック操作を行なう。
ロックしたレコードは、ロックしたファイルディスクリプタ以外からの読み込み、書き込み、サイズ変更、および削除が禁止される。
ファイルをクローズ時にはオープンしたプロセスで設定したロックは解除される。
ER_ENDR : 現在レコードは終端レコードである。 ER_FD : ファイルディスクリプタは存在していない。 ER_IO : 入出力エラーが発生した。 ER_LIMIT : 同時にロック可能なレコードの最大数を越えた。 ER_LOCK : 現在レコードは他からロックされている現在レコードは既に他からロッ クされている(F_TSLOCK/F_CKLOCK指定時)。 : 自プロセスの他ファイルディスクリプタから既にロックされている (F_LOCK指定時)。 : 他ファイルディスクリプタからのロックであり解除できない (F_UNLOCK指定時)。 ER_MINTR : メッセージハンドラが起動されたため待ち処理が中断された(F_LOCK指定時)。 ER_NOSPC : システムのメモリ領域が不足した。 ER_PAR : パラメータが不正である(modeが不正)。
|
WERR chk_fil(LINK *lnk, W mode, TC *pwd)
LINK *lnk 対象ファイル W mode チェックモード ( [ F_READ ] | [ F_WRITE ] | [ F_EXCUTE ] ) ‖ [ F_EXIST ] F_READ 読み込み(R)アクセス権チェック F_WRITE 書き込み(W)アクセス権チェック F_EXCUTE 実行/サーチ(E)アクセス権チェック F_EXIST ファイルの存在チェック TC *pwd パスワード(F_READ または F_WRITE 指定時のみ有効) NULL パスワード指定なし
≧0 正常(ファイルのアクセス情報:F_EXIST 指定時) =0 正常(F_EXIST 以外指定時) <0 エラー(エラーコード)
指定したファイルの指定したアクセスが可能か否かのチェックを行なう。
F_READ、F_WRITE、F_EXCUTE の組み合わせで指定したアクセスが不可のときはエラーとなる。パスワードは F_READ、または F_WRITE を指定したときのみチェックされる。
F_EXIST 指定のときは、ファイルが存在しない場合はエラーとなり、存在する場合は以下のアクセス情報をリターン値として戻す。
0.....0 BAPO SRWE B: アプリケーション属性2 (1:ON、0:OFF) A: アプリケーション属性1 (1:ON、0:OFF) P: 削除不可属性 (1:ON、0:OFF) O: 書込不可属性 (1:ON、0:OFF) S: パスワードの有無 (1:有、0:無 ) R: 読み込み(R)アクセス権 (1:有、0:無 ) W: 書き込み(W)アクセス権 (1:有、0:無 ) E: 実行/サーチ(E)アクセス権 (1:有、0:無 )
ER_ACCES : ファイル(lnk)のアクセス権(F_EXIST以外指定時)がない。 ER_ADR : アドレス(lnk)のアクセスは許されていない。 ER_IO : 入出力エラーが発生した。 ER_NOEXS : ファイル(lnk)は存在していない。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_PAR : パラメータが不正である(modeが不正)。 ER_PWD : ファイル(lnk)の合言葉が不一致である(F_READ/F_WRITE指定時)。 ER_RONLY : ファイル(F_WRITE指定時)の書込不可属性が設定されている、 または属するファイルシステムは書込不可である。
|
ERR chg_fmd(LINK *lnk, A_MODE *mode)
LINK *lnk 対象ファイル A_MODE *mode 変更するアクセスモード
=0 正常 <0 エラー(エラーコード)
指定したファイルのアクセスモードを変更する。
アクセスモードの以下のそれぞれのデータに対して F_NOCHG 指定を行うと、その項目は変更しないことを意味する。
アクセスモードの変更は、ファイルシステムのアクセスレベルが 0 のときは誰でも変更可能であるが、アクセスレベルが 0 でないときはファイルの所有者のプロセスのみ変更可能となる。
すでにオープンされているファイルのアクセスモードを変更した場合、その変更はすでにオープンされているものには影響を与えない。
ER_ACCES : ファイル(lnk)の所有者でない、またはレベル0のユーザでない。 ER_ADR : アドレス(lnk,mode)のアクセスは許されていない。 ER_IO : 入出力エラーが発生した。 ER_NOEXS : ファイル(lnk)は存在していない。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_PAR : パラメータが不正である(modeの内容が不正)。 ER_RONLY : ファイル(lnk)は書込不可である、 または属するファイルシステムは書込不可である。
|
ERR chg_fat(LINK *lnk, W attr)
LINK *lnk 対象ファイル W attr 変更するアクセス属性 ( F_SETRONLY ‖ F_RSTRONLY ‖ F_SETPERM ‖ F_RSTPERM ‖ F_SETA1 ‖ F_RSTA1 ‖ F_SETA2 ‖ F_RSTA2 ) F_SETRONLY 書き込み不可属性のセット F_RSTRONLY 書き込み不可属性のリセット F_SETPERM 削除不可属性のセット F_RSTPERM 削除不可属性のリセット F_SETA1 アプリケーション属性1のセット F_RSTA1 アプリケーション属性1のリセット F_SETA2 アプリケーション属性2のセット F_RSTA2 アプリケーション属性2のリセット
=0 正常 <0 エラー(エラーコード)
指定したファイルのアクセス属性を変更する。
アクセスモードの変更は、ファイルシステムのアクセスレベルが 0 のときは誰でも変更可能であるが、アクセスレベルが 0 でないときはファイルの所有者のプロセスのみ変更可能となる。
すでにオープンされているファイルのアクセスモードを変更した場合、その変更はすでにオープンされているものには影響を与えない。
ER_ACCES : ファイル(lnk)の所有者でない、またはレベル0のユーザでない。 ER_ADR : アドレス(lnk)のアクセスは許されていない。 ER_IO : 入出力エラーが発生した。 ER_NOEXS : ファイル(lnk)は存在していない。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_PAR : パラメータが不正である(attrが不正)。 ER_RONLY : ファイル(lnk)は書込不可である、または属する ファイルシステムは書込不可である。
|
ERR chg_fpw(W fd, TC *pwd)
W fd ファイルディスクリプタ TC *pwd パスワード(TNULL、または最大パスワード文字数まで有効) NULL パスワード解除
=0 正常 <0 エラー(エラーコード)
オープンしたファイルのパスワードを変更する。
パスワードの変更は、ファイルシステムのアクセスレベルが 0 のときは誰でも変更可能であるが、アクセスレベルが 0 でないときはファイルの所有者のプロセスのみ変更可能となる。
ただし、ファイルの所有者が定義されていない場合は、ユーザーレベル 0 のプロセスからも変更可能となる。
ER_ACCES : ファイルの所有者ではない、またはレベル0のユーザでない。 ER_FD : ファイルディスクリプタは存在していない。 ER_ADR : アドレス(pwd)のアクセスは許されていない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_IO : 入出力エラーが発生した。 ER_RONLY : ファイルは書き込み不可である。 または属するファイルシステムは書き込み不可である。
|
ERR chg_fnm(LINK *lnk, TC *name)
LINK *lnk 対象ファイル TC *name 変更するファイル名(TNULL、または最大ファイル名文字数まで有効)
=0 正常 <0 エラー(エラーコード)
指定したファイルのファイル名を変更する。
ファイル名の変更は、ファイルシステムのアクセスレベルが 0 のときは誰でも変更可能であるが、アクセスレベルが 0 でないときはファイルの所有者のプロセスのみ変更可能となる。
書き込み不可属性、または削除不可属性のセットされているファイルのファイル名の変更はできない。
指定したファイルがリンクファイルのときは、参照先のファイル名およびリンクファイル内に保持されている参照ファイル名の両方が変更される。
ER_ACCES : ファイル(lnk)の所有者でない、またはレベル0のユーザでない。 ER_ADR : アドレス(lnk,name)のアクセスは許されていない。 ER_IO : 入出力エラーが発生した。 ER_NOEXS : ファイル(lnk)は存在していない。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_FNAME : ファイル名(name)は空または不正である。 ER_PERM : ファイル(lnk)は削除不可である(削除不可属性がセットされている)。 ER_RONLY : ファイル(lnk)は書込不可である、 または属するファイルシステムは書込不可である。
|
ERR chg_ftm(LINK *lnk, F_TIME *times)
LINK *lnk 対象ファイル F_TIME *times 変更する日時 NULL 現在日時に設定
=0 正常 <0 エラー(エラーコード)
指定したファイルの保存期限、最新アクセス日時、および最新更新日時を変更する。
F_TIME のそれぞれの値が ≦0のときはその項目は変更しない。
ファイル日時の変更は、ファイルシステムのアクセスレベルが 0 のときは誰でも変更可能であるが、アクセスレベルが 0 でないときはファイルの所有者のプロセスのみ変更可能となる。
ER_ACCES : ファイル(lnk)の所有者でない、またはレベル0のユーザでない。 ER_ADR : アドレス(lnk,times)のアクセスは許されていない。 ER_IO : 入出力エラーが発生した。 ER_NOEXS : ファイル(lnk)は存在していない。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_RONLY : ファイル(lnk)は書込不可である、 または属するファイルシステムは書込不可である。
|
WERR fil_sts(LINK *lnk, TC *name, F_STATE *stat, F_LOCATE *locat)
LINK *lnk 対象ファイル TC *name ファイル名の格納領域(最大ファイル名+1文字分の領域) NULL 格納しない F_STATE *stat ファイル管理情報の格納領域 NULL 格納しない F_LOCATE *locat ファイル所在情報の格納領域 NULL 格納しない
≧0 正常(ファイルの参照カウント) <0 エラー(エラーコード)
指定したファイルの情報を取り出す。
ER_ADR : アドレス(lnk,name,stat,locat)のアクセスは許されていない。 ER_FD : ファイルディスクリプタは存在していない(ofl_stsの場合)。 ER_IO : 入出力エラーが発生した。 ER_NOEXS : ファイル(lnk)は存在していない(fil_stsの場合)。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない (fil_stsの場合)。 ER_NOSPC : システムのメモリ領域が不足した。
|
WERR ofl_sts(W fd, TC *name, F_STATE *stat, F_LOCATE *locat)
W fd ファイルディスクリプタ TC *name ファイル名の格納領域(最大ファイル名+1文字分の領域) NULL 格納しない F_STATE *stat ファイル管理情報の格納領域 NULL 格納しない F_LOCATE *locat ファイル所在情報の格納領域 NULL 格納しない
≧0 正常(ファイルの参照カウント) <0 エラー(エラーコード)
オープンしたファイルの情報を取り出す。
ER_ADR : アドレス(lnk,name,stat,locat)のアクセスは許されていない。 ER_FD : ファイルディスクリプタは存在していない(ofl_stsの場合)。 ER_IO : 入出力エラーが発生した。 ER_NOEXS : ファイル(lnk)は存在していない(fil_stsの場合)。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない (fil_stsの場合)。 ER_NOSPC : システムのメモリ領域が不足した。
|
WERR lnk_sts(LINK *lnk, F_LINK *stat)
LINK *lnk 対象リンクファイル F_LINK *stat リンクファイル情報の格納領域 NULL 格納しない
≧0 正常(リンクファイルの参照カウント) <0 エラー(エラーコード)
指定したリンクファイルのリンクファイル情報を取り出す。
指定したファイルがリンクファイルでないときはエラーとなる。
ER_ADR : アドレス(lnk,stat)のアクセスは許されていない。 ER_IO : 入出力エラーが発生した。 ER_NOEXS : ファイル(lnk)は存在していない。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOLNK : リンクファイルではない。 ER_NOSPC : システムのメモリ領域が不足した。
|
WERR syn_lnk(LINK *lnk, W opt)
LINK *lnk 対象リンクファイル W opt 同期属性 =0 チェックのみ ≠0 チェックおよび更新
≧0 正常(同期状態) <0 エラー(エラーコード)
指定したリンクファイルが保持しているファイル名、生成日時と、参照先のファイルの実際のファイル名、生成日時が一致しているかどうかをチェックする。
opt = 0 のときはチェックのみを行ない、opt ≠ 0 のときは異なっていた場合は、指定したリンクファイルが保持している情報を参照先のファイルの実際のファイル名、生成日時と一致するように更新する。
リターン値は以下の同期状態となる。
F_SYNC 一致している。 F_DNAME ファイル名が異なっていた F_DDATE 生成日時が異なっていた F_DBOTH ファイル名と生成日時の両方が共に異なっていた
指定したファイルがリンクファイルでないときはエラーとなる。
ER_ADR : アドレス((lnk))のアクセスは許されていない。 ER_IO : 入出力エラーが発生した。 ER_NOEXS : ファイル(lnk)は存在していない。 ER_NOFS : ファイル(lnk)またはファイル(lnk)の参照先のファイルの属する ファイルシステムは接続されていない。 ER_NOLNK : リンクファイルではない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_RONLY : ファイル(lnk)は書込不可である、または属するファイルシステム は書込不可である。
|
ERR get_dfm(DA_MODE *mode)
DA_MODE *mode デフォールトアクセスモードの格納領域typedef struct { UH f_ownacc; /* 所有者アクセスモード */ UH f_grpacc; /* グループアクセスレベル */ UH f_pubacc; /* 一般アクセスレベル */ H f_grpno; /* グループ番号(0〜4) */ UH f_gacc[N_GRP]; /* グループアクセスレベル */ } DA_MODE;
=0 正常 <0 エラー(エラーコード)
自ユーザのデフォールトアクセスモードを取り出す。
デフォールトアクセスモードは、 ファイルの生成時にアクセスモードを指定しなかったときに適用されるデフォールトのアクセスモードであり、ユーザごとに定義される。
f_gacc[4] は、ユーザの所属するグループのそれぞれに対して設定されているグループアクセスレベルを示す単なる参照用のデータであり、f_grpacc が実際のグループアクセスレベルとして適用される。
ER_ADR : アドレス(mode)のアクセスは許されていない。
|
ERR set_dfm(DA_MODE *mode)
DA_MODE *mode 設定するデフォールトアクセスモード
=0 正常 <0 エラー(エラーコード)
自ユーザのデフォールトアクセスモードを設定する。
変更したデフォールトアクセスモードは、同一ユーザの全プロセスに対して有効となる。
ER_ADR : アドレス(mode)のアクセスは許されていない。 ER_PAR : パラメータが不正である(mode の内容が不正)。
|
ERR att_fls(TC *dev, TC *name, LINK *lnk, UW mode)
TC *dev デバイス名 TC *name 接続名(TNULL、または最大接続名文字数まで有効) LINK *lnk 接続したファイルシステムのルートファイルのリンクの格納領域 NULL 格納しない UW mode 接続モード ( FS_SYNC ‖ FS_ASYN ‖ FS_RONLY )
=0 正常 <0 エラー(エラーコード)
指定したデバイス上に存在するファイルシステムを指定した接続名でシステムに接続する。
接続名は、接続したファイルシステムのルートファイルを絶対パス名により指定するために使用され、すでに接続済みの接続名と同じであってはいけない。
すでに接続済みのファイルシステムを再度接続しようとしたとき、また、接続しようとしたファイルシステムのファイルシステム名と同一のファイルシステム名を持つファイルシステムがすでに接続されていたときエラーとなる。
ファイルシステムを接続するには、デバイスに対する接続アクセス権が必要となる。
ER_ACCES : 論理デバイス(dev)のアクセス権(接続)がない。 ER_ADR : アドレス(dev,name,lnk)のアクセスは許されていない。 ER_BUSY : 論理デバイス(dev)は既にオープンされている、または接続されている。 ER_EXS : 接続名(name)は既に存在しているまたは同一のファイルシステム名 のファイルシステムが既に接続されている。 ER_FNAME : ファイル名(name)は空または不正である。 ER_IO : 入出力エラーが発生した。 ER_LIMIT : 同時接続可能な最大ファイルシステム数を越えた。 ER_NODEV : デバイス(dev)へのアクセスができない。 ER_NOEXS : デバイス(dev)は登録されていない、またはブロック型デバイスでない。 ER_NOMDA : デバイス(dev)のメディアが存在しない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_TRON : TRON形式のファイルシステムではない。
|
ERR det_fls(TC *dev, W eject)
TC *dev デバイス名 W eject イジェクト指定 =0 イジェクトしない ≠0 イジェクトする(イジェクト不可能なデバイスの時は無視)
=0 正常 <0 エラー(エラーコード)
指定したデバイス上の接続済みのファイルシステムをシステムから切り離す。この時、メモリ上に一時的に保持されている内容等があればファイルシステム上にすべて書き出す。
切断の対象となるファイルシステム内のファイルがオープンされているとき、または作業ファイルとしているプロセスが存在しているときは、切断できない。
ファイルシステムを切断するには、デバイスに対する接続アクセス権が必要となる。
ER_ACCES : 論理デバイス(dev)のアクセス権(接続)がない。 ER_ADR : アドレス(dev)のアクセスは許されていない。 ER_BUSY : ファイルシステムは使用中である。 ER_IO : 入出力エラーが発生した。 ER_NOEXS : デバイス(dev)は登録されていない、またはブロック型デバイスでない。 ER_NOFS : 論理デバイス(dev)上の属するファイルシステムは接続されていない。 ER_NOMDA : デバイスのメディアが存在しない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_RONLY : ファイルは書込不可である、または属するファイルシステムは 書込不可である。
|
ERR syn_fls(VOID)
なし
=0 正常 <0 エラー(エラーコード)
メモリ上に一時的に保持されていた内容等をファイルシステム上にすべて書き出し、ファイルシステム全体を矛盾ないように更新する。
接続されているすべてのファイルシステムに対して行う。
ER_IO : 入出力エラーが発生した。 ER_NOMDA : デバイスのメディアが存在しない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_RONLY : ファイルは書込不可である、または属するファイルシステムは 書込不可である。
|
WERR fls_sts(TC *dev, FS_STATE *buff)
TC *dev デバイス名 FS_STATE *buff ファイルシステム管理情報の格納領域
≧0 正常(ファイルシステムの接続モード) ( 0:ファイルシステムは書込可、1:ファイルシステムは書込不可) <0 エラー(エラーコード)
指定したデバイス上の接続済みのファイルシステムの管理情報を取り出す。
ファイルシステムの管理情報を取り出すためには、デバイスに対する接続アクセス権が必要となる。
ER_ACCES : 論理デバイス(dev)のアクセス権(接続)がない。 ER_ADR : アドレス(dev,buf)のアクセスは許されていない。 ER_BUSY : 論理デバイスは既にオープンされている ER_IO : 入出力エラーが発生した。 ER_NODEV : デバイス(dev)へのアクセスができない。 ER_NOEXS : デバイス(dev)は登録されていない、またはブロック型デバイスでない。 ER_NOMDA : デバイス(dev)のメディアが存在しない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_TRON : TRON形式のファイルシステムではない。
|
ERR chg_fls(TC *dev, TC *fs_name, TC *fs_locate)
TC *dev デバイス名 NULL の場合エラーとなる TC *fs_name 変更するファイルシステム名 NULL 変更しない TC *fs_locate 変更するデバイス所在名 NULL 変更しない
=0 正常 <0 エラー(エラーコード)
指定したデバイス上の接続済みのファイルシステムのファイルシステム名およびデバイス所在名を変更する。
ファイルシステム情報を変更するには、 デバイスに対する接続アクセス権、および書込みアクセス権が必要となる。
ER_ACCES : 論理デバイス(dev)のアクセス権(接続、書込)がない。 ER_ADR : アドレス(dev,fs_name,fs_locate)のアクセスは許されていない。 ER_BUSY : 論理デバイスは既にオープンされている ER_EXS : 指定したファイルシステム名のファイルシステムは既に存在している (接続されている)。 ER_FNAME : ファイルシステム名は空、または不正 ER_IO : 入出力エラーが発生した。 ER_NODEV : デバイス(dev)へのアクセスができない。 ER_NOEXS : デバイス(dev)は登録されていない、またはブロック型デバイスでない。 ER_NOMDA : デバイス(dev)のメディアが存在しない。 ER_NOSPC : システムのメモリ領域が不足した。 ER_RONLY : ファイルは書込不可である、または属するファイルシステムは 書込不可である。 ER_TRON : TRON形式のファイルシステムではない。
|
WERR get_nlk(LINK *lnk)
LINK *lnk 開始ファイルのリンク (入力) 次のファイルのリンクの格納領域 (出力)
≧0 正常(取り出したファイルの参照カウント) <0 エラー(エラーコード)
指定した開始ファイルのファイルIDより大きなファイルIDを持つファイルのうち最小のファイルIDを持つファイルへのリンクを取り出す。
開始ファイルのファイルIDは実際には存在しないファイルでも良い。 取り出したファイルのリンクの属性データはすべて 0 となる。
本システムコールにより、ファイルシステム上に存在するすべてのファイル(参照カウント = 0 のファイルも含む)へのリンクを取り出すことができる。
ER_ADR : アドレス(lnk)のアクセスは許されていない。 ER_IO : 入出力エラーが発生した。 ER_NOFS : ファイル(lnk)の属するファイルシステムは接続されていない。 ER_NOEXS : ファイル(lnk)より大きなファイルIDを持つファイルは存在していない。 ER_NOSPC : システムのメモリ領域が不足した。
|
WERR lst_fls(F_ATTACH *buff, W cnt)
F_ATTACH *buff ファイルシステム接続情報の格納領域(配列) typedef struct { TC a_name[L_CONNM]; /* 接続名 */ TC dev[L_DEVNM]; /* 論理デバイス名 */ } F_ATTACH; W cnt > 0 接続されている全てのファイルシステムの接続情報を buff に取り出す。cnt は buff の要素数を示す。 = F_GETDEV buff->a_name[] に設定した接続名に対応する デバイス名を buff->dev[] に取り出す。 = F_GETNAM buff->dev[] に設定したデバイス名に対応する 接続名を buff->a_name[] に取り出す。
=1 正常(F_GETDEV, F_FETNAM 指定時) ≧0 正常(接続済みのファイルシステム数) <0 エラー(エラーコード)
接続済みのファイルシステムの接続名とデバイス名と取り出す。
接続されているファイルシステムの数が指定した要素数(cnt)より多い場合は、最初の要素数(cnt)個のみを取り出す。
ER_ADR : アドレス(buff)のアクセスは許されていない。 ER_NOFS : ファイルシステムは接続されていない(cnt=−1,−2の時)。 ER_PAR : パラメータが不正である(cnt=0,<−2)。
|
WERR map_rec(W fd, W offset, B **addr, W size, W mode)
W fd ファイルディスクリプタ W offset マップ開始バイトオフセット B **addr マップされたメモリアドレスの格納領域 W size マップするバイトサイズ W mode マップモード ( [ F_READ ] | [ F_WRITE ] | [ F_EXCUTE ] ) | [ F_COMMON ‖ F_SYSTEM ] F_READ 読み込み用マップ F_WRITE 書き込み用マップ F_EXECUTE 実行用マップ F_COMMON 共有メモリー空間にマップ F_SYSTEM システムメモリー空間にマップ
>0 正常(マップID) <0 エラー(エラーコード)
オープンしたファイルの現在レコードの offset から size バイトをメモリー空間上にマップする。マップされたレコードの内容はメモリーとしてアクセスすることができる。
F_COMMON を指定した場合には、共有メモリー空間上にマップされる。この場合、すべてのプロセスからアクセス可能となる。 F_SYSTEM を指定した場合には、システムメモリー空間上にマップされる。この場合、すべてのシステムプロセスからアクセス可能となる。マップしたプロセス自身であっても、一般のアプリケーションプロセスからはアクセスできない。したがって、アプリケーションプロセスからはこの指定を使用すべきではない。 F_COMMON,F_SYSTEM のいずれも指定しなければ、マップしたプロセスのローカルメモリー空間上にマップされる。この場合、マップしたプロセス以外からアクセスすることは出来ない。
マップされるアドレスはシステムで決定され、アプリケーション側から指定することはできない。
マップモードの指定はオープンしたモードに矛盾してはいけない。(ER_FD)
リンクレコードはマップできない。(ER_REC)
マップ中は、次の操作は禁止され ER_BUSY となる。
インプリメントに依存して以下の制限がつけられる場合がある。
ER_FD : ファイルディスクリプタは存在していない。 : マップモードとオープンモードが矛盾している。 ER_REC : 現在レコードはリンクレコードである。 ER_ADR : アドレス(addr)のアクセスは許されていない。 ER_ENDR : 現在レコードは終端レコードである。 ER_LOCK : 現在レコードは他からロックされている。 ER_IO : 入出力エラーが発生した。 ER_PAR : パラメータが不正である。 ER_NOSPT : システムの制限によりマップできない。
|
ERR ump_rec(W fd, W mapid)
W fd ファイルディスクリプタ W mapid マップID
=0 正常 <0 エラー(エラーコード)
オープンしているファイルのマップIDで指定したマップを解除する。 ファイルのクローズ時にはオープンしたプロセスで設定したマップは解除される。
ER_FD : ファイルディスクリプタは存在していない。 ER_NOEXS : マップIDは存在していない。 ER_IO : 入出力エラーが発生した。
|
WERR chg_fsm( TC *dev, UW mode )
TC *dev 論理デバイス名 UW mode 接続モード (att_fls の mode と同じ) ( FS_SYNC ‖ FS_ASYN ‖ FS_RONLY ) FS_SYNC 同期 FS_ASYN 非同期 FS_RONLY 書き込み禁止
≧0 正常(変更前の接続モード) <0 エラー(エラーコード)
dev のデバイスの接続状態を mode で指定した接続モードに変更する。 dev はすでに接続されているデバイスでなければならない。 リターン値に変更前の接続モードを返す。
接続モードを変更するためには、dev に対する接続アクセス権が必要である。
接続モード変更前が書き込み可であった場合、書き込み禁止に変更しても変更前に行われた map_rec() による書き込みモードのレコードマップはそのまま有効となり、書き込みも行われる。 F_WRITE または F_UPDATE でオープンしているファイルがあるとき、接続モードを書き込み禁止にすると、そのファイルに対する wri_rec() 等の書き込みが ER_RONLY となる。
ER_ACCES : 論理デバイス(dev)に接続アクセス権がない。 ER_ADR : アドレス(dev)のアクセスが許されていない。 ER_IO : 入出力エラーが発生した。 ER_PAR : パラメータが不正である。 ER_NOFS : 論理デバイス(dev)は、ファイルシステムとして接続されていない。