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

概要

  • linux2.6/include/linux/poll.hにて定義
  • 引数で渡された数だけユーザアドレス空間のファイルディスクリプタ監視オブジェクトをカーネル空間へコピーする
    • コピーが正常に行われた場合は0を、そうでない場合はエラーコードを返す

引数

  • nr--数
  • ufdset--コピー元のユーザアドレス空間にあるファイルディスクリプタ監視オブジェクト
  • fdset--コピー先のカーネルアドレス空間にあるファイルディスクリプタ監視オブジェクト

実装

/*

* We do a VERIFY_WRITE here even though we are only reading this time:
* we'll write to it eventually..
*
* Use "unsigned long" accesses to let user-mode fd_set's be long-aligned.
*/

static inline

int get_fd_set(unsigned long nr, void __user *ufdset, unsigned long *fdset) {

	nr = FDS_BYTES(nr);
	if (ufdset) {
		int error;
		error = verify_area(VERIFY_WRITE, ufdset, nr);
  • アドレスの範囲(開始アドレスufdset+サイズnr)がカレントスレッドのリミットを越えていない場合、0を返す
		if (!error && __copy_from_user(fdset, ufdset, nr))
			error = -EFAULT;
  • ユーザアドレスufdsetからカーネルアドレスfdsetへデータをコピーする
		return error;
	}
	memset(fdset, 0, nr);
	return 0;

}

呼出元


履歴

  • 作者:ひら
  • 日付:2007/4/1
  • 対象:2.6.10
    更新日更新者更新内容

コメント/タグ?



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-11-24 (火) 07:13:22 (2945d)