このページを編集する際は、編集に関する方針に従ってください。

概要

  • linux2.6/fs/read_write.cにて定義
  • 引数で渡されたファイルに同期書き込み(書き込みが完了するまで待つ)を行う

引数

  • file--書き込み対象のファイル
  • buf--書き込む内容を含んだバッファ(pos〜pos+countがfileに書き込まれる)
  • count--書き込む範囲
  • pos--書き込む内容の先頭
    • 書き込み後のファイルオフセットを記録する(正常に処理が行われた場合はpos+countの値が設定される)

実装

ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) {

	struct inode *inode = file->f_dentry->d_inode;
	ssize_t ret;
	if (!(file->f_mode & FMODE_WRITE))
		return -EBADF;
	if (!file->f_op || (!file->f_op->write && !file->f_op->aio_write))
		return -EINVAL;
	ret = locks_verify_area(FLOCK_VERIFY_WRITE, inode, file, *pos, count);
	if (!ret) {
		ret = security_file_permission (file, MAY_WRITE);
    • 詳細はsecurity_file_permission()/linux2.6?を参照
		if (!ret) {
			if (file->f_op->write)
				ret = file->f_op->write(file, buf, count, pos);
  • fileにbufの範囲(pos〜pos+count)を同期書き込み(書き込みが完了するまで待つ)を行う
			else
				ret = do_sync_write(file, buf, count, pos);
  • fileにbufの範囲(pos〜pos+count)を同期書き込み(書き込みが完了するまで待つ)を行う
			if (ret > 0)
				dnotify_parent(file->f_dentry, DN_MODIFY);
  • ディレクトリエントリfile->f_dentryの親が持つ通知リストから、イベントDN_MODIFYを受け取りたいエントリに対してシグナルSIGIO(入出力が可能になった)を送信する
		}
	}
	return ret;

}

EXPORT_SYMBOL(vfs_write);

呼出元


履歴

  • 作者:ひら
  • 日付:2006/10/11
  • 対象:2.6.10
    更新日更新者更新内容

コメント/タグ?



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-05-11 (月) 20:10:48 (689d)