COPY(9)

名称
copy, copyin, copyout, copystr, copyinstr - カーネルコピー関数

書式
<sys/types.h> <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 からカーネル空間のアドレス kaddr へ len バイトのデータをコピーします。

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

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)