VOP_FSYNC(9) FreeBSD 一般コマンドマニュアル

VOP_FSYNC

前のページ 上に戻る 次のページ

VOP_FSYNC


     #include <sys/vnode.h>

     int
     VOP_FSYNC(struct vnode *vp, struct ucred *cred, int waitfor,
             struct proc *p);


解説

     この呼び出しはファイルの全ての汚れたバッファを吐き出します。 sync(2) およ
     び fsync(2) システムコールを実装するために使用されます。

     引数は以下の通りです。

     vp       ファイルの vnode。

     cred     呼び出し側の証明。

     waitfor  入出力の完了を関数が待つべきかどうか。

     p        呼び出しているプロセス。

     引数 waitfor は MNT_WAIT または MNT_NOWAIT のどちらかで、関数が戻る前に書
     き込みの終了を待つべきかどうかを指定します。


ロック

     ファイルはエントリ時にロックされるべきです。


戻り値

     呼び出しが成功した場合には 0 が返され、そうでない場合には適切なエラーコー
     ドが返されます。


疑似コード

     int
     vop_fsync(struct vnode *vp, struct ucred *cred, int waitfor, struct proc *p)
     {
         struct buf *bp;
         struct buf *nbp;
         struct timeval tv;
         int s;

     loop:
         s = splbio();
         for (bp = vp->v_dirtyblkhd.lh_first; bp; bp = nbp) {
             nbp = bp->b_vnbufs.le_next;

             /*
              * 既に書き込み中のバッファを無視します。
              */
             if (bp->b_flags & B_BUSY)
                 continue;

             /*
              * バッファが汚れているか確認します。
                 tsleep((caddr_t)&vp->v_numoutput, PRIBIO + 1, "vopfsn");
             }
             splx(s);
     #ifdef DIAGNOSTIC
             if (vp->v_dirtyblkhd.lh_first) {
                 vprint("vop_fsync: dirty", vp);
                 goto loop;
             }
     #endif
         }

         /*
          * ディスク上の vnode を書き出します。
          */
         tv = time;
         return VOP_UPDATE(vp, &tv, &tv, waitfor == MNT_WAIT);
     }


エラー

     [ENOSPC]           ファイルシステムが一杯です。

     [EDQUOT]           クォータを超過しました。


関連項目

     vnode(9)


作者

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

FreeBSD 4.4                      July 24, 1996                     FreeBSD 4.4

ABELNET VPSサービス