RFC 1094
上記2つは同じ内容Yudai.icon
LAN上の共有ファイルシステムへの透過的なリモートアクセスを提供する Machine, OS, network arthitecture, transport protocolに依存しない形で設計されている
ホストアドレス、プログラム番号、手続き番号の組み合わせにより、1つのリモートサービス手続きが指定される
ネットワーク上でデータタイプを表現する共通の方法を提供する
Stateless servers
サーバーが正常に機能するためにクライアントに関する余分なステート情報を保持する必要はない
サーバーが応答するまでクライアントはリクエストを再試行するだけでよく、サーバーがクラッシュしたことやネットワークが一時的にダウンしたことを知る必要もない
目標はプロトコル自体に余分な状態を一切導入しない。回復を簡素化するために可能な限り操作をIdempotentにする。(操作を繰り返し実行できる) NFS Ptotocol Definition
File system model
最下層のファイルを除いてディレクトリ構成される階層型のファイルシステムを前提としている
ディレクトリ内の各エントリには文字列が割り当てられる
パス名の構成要素を1つづつ検索する
パス名には、ディレクトリ構成要素館の区切り文字列が必要であるが、異なるオペレーティングシステムでは異なる区切り文字を使用している
ファイルとディレクトリは多くの手順で類似しているが読み込む際には手順が異なる
code:dataTypes.c
enum stat {
NFS_OK = 0, // 操作の成功
NFSERR_PERM = 1, // 操作を実行するための所有権がない
NFSERR_NOENT = 2, // 指定されたファイルやディレクトリが存在しない
NFSERR_IO = 5, // 操作中にディスクエラーが発生した
NFSERR_NXIO = 6, // 指定されたデバイスまたはアドレスは存在しない
NFSERR_ACCES = 13, // アクセス拒否された
NFSERR_EXIST = 17, // 指定されたファイルがすでに存在している
NFSERR_NODEV = 19, // 指定されたデバイスが存在しない
NFSERR_NOTDIR = 20, // ディレクトリ操作において対象がディレクトリではなかった
NFSERR_ISDIR = 21,// ファイル操作において対象がディレクトリでした
NFSERR_FBIG = 27, // 操作によってファイルがサーバーの制限を超えるサイズになりました
NFSERR_NOSPC = 28, // サーバーのファイルシステムに空き容量がありません
NFSERR_ROFS = 30, // 読み取り専用のファイルシステムに対して書き込みを試みました
NFSERR_NAMETOOLONG = 63, // ファイル名がサーバーの制限を超えています
NFSERR_NOTEMPTY = 66, // 空でないディレクトリを削除しようとしています
NFSERR_DQUOT = 69, // クライアントのディスククウォータが超過しています
NFSERR_STALE = 70, // 引数として渡されたファイルハンドルが無効
NFSERR_WFLUSH = 99 // サーバーの書き込みキャッシュがディスクにフラッシュされました
};
code:ftype.c
enum ftype {
NFNON = 0,
NFREG = 1, // 通常のファイル
NFDIR = 2, // ディレクトリ
NFBLK = 3, // ブロックデバイス
NFCHR = 4, // キャラクターデバイス
NFLNK = 5, // シンボリックリンク
};
code:fhandle.c
FHSIZEで固定長の不透明なデータとして定義する
サーバーが必要とする情報を含み, ファイルまたはディレクトリを識別する