tail head cat sleep
QR code linking to this page

manページ  — VOP_CREATE

名称

VOP_CREATE, VOP_MKNOD, VOP_MKDIR, VOP_SYMLINK – ファイル、ソケット、FIFO、デバイス、ディレクトリまたはシンボリックリンクの作成

内容

書式

#include <sys/param.h>
#include <sys/vnode.h>
#include <sys/namei.h>

int
VOP_CREATE(struct vnode *dvp, struct vnode **vpp, struct componentname *cnp, struct vattr *vap);

int
VOP_MKNOD(struct vnode *dvp, struct vnode **vpp, struct componentname *cnp, struct vattr *vap);

int
VOP_MKDIR(struct vnode *dvp, struct vnode **vpp, struct componentname *cnp, struct vattr *vap);

int
VOP_SYMLINK(struct vnode *dvp, struct vnode **vpp, struct componentname *cnp, struct vattr *vap, char *target);

解説

これらのエントリポイントは、新しいファイル、ソケット、FIFO、デバイス、 ディレクトリまたはシンボリックリンクを、 指定されたディレクトリの中に作成します。

引数は以下の通りです。
dvp
  ディレクトリのロックされた vnode。
vpp
  作成結果のロックされた vnode が格納されるべき、変数のアドレス。
cnp
  生成された要素のパス名。
vap
  新しいオブジェクトの作成時に使用されるべき属性。
target
  シンボリックリンクの対象のパス名。

これらのエントリポイントは、オブジェクトの生成中に VOP_LOOKUP(9) の後に呼び出されます。

ロック

ディレクトリ dvp は入る時にロックされ、戻る時にもロックされ続けてなければなりません。 呼び出しが成功の場合には、新しいオブジェクトがロックされて返されます。

戻り値

成功時には、新しいオブジェクトの vnode が *vpp に置かれ、0 が返されます。 そうでない場合には、適切なエラーが返されます。

疑似コード

int
vop_create(struct vnode *dvp,
           struct vnode **vpp,
           struct componentname *cnp
           struct vattr *vap)
{
    int mode = MAKEIMODE(vap->va_type, vap->va_mode);
    struct vnode *vp;
    int error;

*vpp = NULL; if ((mode & IFMT) == 0)         mode |= IFREG;

error = SOMEFS_VALLOC(dvp, mode, cnp->cn_cred, &vp); if (error)         return error;

/* * 新しい vnode のパーミッションを更新します。 * これには、ディレクトリからのグループのコピーを含みます。 */ ...;

#ifdef QUOTA /* * できる限りクォータ情報をチェックします。 */ ...; #endif

/* * ディレクトリに新しい vnode を入れ、ディレクトリ内容が変更される * 前に vnode がディスクをアクセスしない様に注意します。 */ error = ...;

if (error)         goto bad;

*vpp = vp;

return 0;

bad: /* * inode またはディレクトリの更新の試みで書き込みエラーが * 発生したため inode の割り当てを解放しなければなりません。 */ vput(vp);

/* * vp のためのファイルシステム資源を解放。 */ ...;

return error; }

エラー

[ENOSPC]
  ファイルシステムが一杯です。
[EDQUOT]
  そのユーザのファイルシステム空間または inode のクォータを超過しました。

関連項目

VOP_LOOKUP(9,) vnode(9)

歴史

関数 VOP_CREATEBSD 4.3 で登場しました。

作者

このマニュアルページは Doug Rabson が書きました。

VOP_CREATE (9) July 24, 1996

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.