VN_FULLPATH(9) | FreeBSD Kernel Developer's Manual | VN_FULLPATH(9) |
名称
vn_fullpath — プロセスのコンテキストを与えて、vnode 参照を完全なパス名に変換する書式
#include < sys/param.h>#include < sys/vnode.h>
int
vn_fullpath( struct thread *td, struct vnode *vp, char **retbuf, char **freebuf);
解説
vn_fullpath() 関数は、渡された vnode のための文字列パス名を生成するために“最前の努力”の試みます。もしあるなら、結果のパスは、渡されたスレッドポインタに関連しているプロセスのルートディレクトリに相対的となります。 vn_fullpath() 関数は、VFS 名前キャッシュを検査すること、およびプロセスのルートからオブジェクトまでのパスの再構築を試みることによって実装されます。このプロセスはいくつかの理由で必ずしも信頼があるとは限りません: パスの中間エントリはキャッシュで見つけられないかもしれません。ファイルには、1 つ以上の名前 (ハードリンク) があるかもしれなくて、すべてのファイルシステムは名前キャッシュを使用しません (特に、ほとんどの合成ファイルシステムはそうしません)。 1 つの名前は (他のファイルシステムをカバーするファイルシステムのコンテキストで) 1 つ以上のファイルに使用されるかもしれません。ファイルには、名前がないかもしれません (まだオープンしているか、または参照されているが、削除されているなら)。しかしながら、結果の文字列は、まだ vnode ポインタ値か、デバイス番号と inode 番号よりユーザにはより利用可能となります。この関数の結果を消費するコードは (適切に操作し) 失敗が予想されるはずです。
引数は次の通りです:
- td
- 呼び出しを実行するスレッド。このポインタは、使用するルート vnode を識別するために、プロセスとそのファイル記述子構造を見つけるために修飾参照 (dereference) されます。
- vp
- 検索される vnode。呼び出し側によってロックされる必要はありません。
- retbuf
- vn_fullpath() が (成功すれば) 結果のパス名を含む新しく割り付けられたバッファを指す char * へのポインタ。
- freebuf
- vn_fullpath() が (成功すれば) 呼び出し側が retbuf で行われるとき、開放されるバッファを指す、 char * へのポインタ。
典型的なコンシューマ (消費者) は 2 つの文字ポインタを宣言します: fullpath と freepath です。それらは、 freepath を NULL に、 fullpath を vn_fullpath() への呼び出しが失敗したイベントで使用する名前に設定します。 fullpath の値で行われた後に、呼び出し側は、 freepath が NULL であるかどうかチェックし、そして、そうであれば、 M_TEMP のプールタイプで free(9) を呼び出します。
戻り値
vnode からパス名への変換が成功すれば、0 が返され、そうでなければ、エラー番号が返されます。関連項目
free(9)作者
このマニュアルページは、 <rwatson@FreeBSD.org>によって書かれました。November 23, 2008 | FreeBSD |