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.

Unix’s “power tools” are more like power switchblades that slice off the operator’s fingers quickly and efficiently.
— The Unix Haters' handbook