総合手引 | セクション 9 | English | オプション |
#include <sys/param.h>
#include <sys/vnode.h>
引数は以下の通りです。
vp | |
ファイルの vnode。 | |
cred | |
呼び出し側の証明。 | |
waitfor | |
入出力の完了を関数が待つべきかどうか。 | |
MNT_WAIT | 入出力の完了を同期的に待ちます。 |
MNT_NOWAIT | |
全ての入出力を開始しますが、それを待ちません。 | |
MNT_LAZY | ファイルシステムの syncer によって書込まれていないデータを出力します。 |
td | |
呼び出しているスレッド。 | |
引数 waitfor は MNT_WAIT または MNT_NOWAIT のどちらかで、関数が戻る前に書き込みの終了を待つべきかどうかを指定します。
int vop_fsync(struct vnode *vp, struct ucred *cred, int waitfor, struct thread *td) { 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; /* * バッファが汚れているか確認します。 */ if ((bp->b_flags & B_DELWRI) == 0) panic("vop_fsync: not dirty");
vfs_bio_awrite(bp); splx(s); goto loop; } splx(s);
if (waitfor == MNT_WAIT) { s = splbio(); while (vp->v_numoutput) { vp->v_flag |= VBWAIT; 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] | |
クォータを超過しました。 | |
VOP_FSYNC (9) | July 24, 1996 |
総合手引 | セクション 9 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | The “N” in NFS stands for Not, or Need, or perhaps Nightmare | ” |
— Harry Spencer |