スポンサーリンク

COPY(9) FreeBSD カーネル開発者マニュアル COPY(9)

名称

copy, copyin, copyout, copystr, copyinstr − カーネルコピー関数

書式

#include <sys/types.h>
#include <sys/systm.h>

int

copyin(const void *uaddr, void *kaddr, size_t len);

int

copyout(const void *kaddr, void *uaddr, size_t len);

int

copystr(const void *kfaddr, void *kdaddr, size_t len, size_t *done);

int

copyinstr(const void *uaddr, void *kaddr, size_t len, size_t *done);

解説

copy 関数群は連続したデータをあるアドレスから別のアドレスへコピーするよう デザインされています。 copystr() 以外の関数は、ユーザ空間からカーネル空間 へ、あるいは反対向きにデータをコピーします。

copy 関数群は以下の機能を提供します。

       copyin()

ユーザ空間のアドレス uaddr からカーネル空間のアドレス kaddrlen バイトのデータをコピーします。

copyout()
カーネル空間のアドレス kaddr からユーザ空間のアドレス uaddrlen バイトのデータをコピーします。

copystr()
カーネル空間のアドレス kfaddr からカーネル空間のアドレス kdaddr へヌル文字で終端された最大 len 文字の文字列をコピー します。末尾のヌル文字を含む実際にコピーされた文字数が *done に返されます (done が NULL ではない場合)。

copyinstr()
ユーザ空間のアドレス uaddr からカーネル空間のアドレス kaddr へヌル文字で終端された最大 len 文字の文字列をコピーします。 末尾のヌル文字を含む実際にコピーされた文字数が *done に返さ れます (done が NULL ではない場合)。

戻り値

それぞれの copy 関数は成功した時に 0 を、不正なアドレスに遭遇した時に EFAULT を返します。さらに、 copystr() および copyinstr() 関数は文字列が len バイトよりも長い時に ENAMETOOLONG を返します。

関連項目

fetch(9), store(9)

FreeBSD 10.0 January 7, 1996 FreeBSD 10.0

スポンサーリンク