memcpy_tofs.9


名前

get_user_byte, get_fs_byte, get_user_word, get_fs_word, get_user_long, get_fs_long, put_user_byte, put_fs_byte, put_user_word, put_fs_word, put_user_long, put_fs_long, __generic_memcpy_tofs, __constant_memcpy_tofs, __generic_memcpy_fromfs, __constant_memcpy_fromfs, memcpy_fromfs, memcpy_tofs --- ユーザ空間から、またはユーザ空間へデータをコピーする

書式
       #include 

       static inline unsigned char get_user_byte(const char * addr);
       static inline unsigned char get_fs_byte(const char *addr);

       static inline unsigned short get_user_word(const short *addr);
       static inline unsigned short get_fs_word(const short *addr);

       static inline unsigned long get_user_long(const int *addr);
       static inline unsigned long get_fs_long(const int *addr);

       static inline void put_user_byte(char val,char *addr);
       static inline void put_fs_byte(char val,char *addr);

       static inline void put_user_word(short val,short * addr);
       static inline void put_fs_word(short val,short * addr)

       static inline void put_user_long(unsigned long val,int * addr);
       static inline void put_fs_long(unsigned long val,int * addr);

       static inline void __generic_memcpy_tofs(void * dest,
                                               const void * src,
                                               unsigned long n);

       static inline void __constant_memcpy_tofs(void * dest,
                                                const void * src,
                                                unsigned long n);

       static inline void __generic_memcpy_fromfs(void * dest,
                                                 const void * src,
                                                 unsigned long n);

       static inline void __constant_memcpy_fromfs(void * dest,
                                                   const void * src,
                                                   unsigned long n);

       static inline void memcpy_fromfs(void * dest, const void * src,
                                      unsigned long n);

       static inline void memcpy_tofs(void * dest,const void * src,
                                      unsigned long n);
説明

これらはユーザ空間とカーネル空間の間でデータを交換するための、 アーキテクチャ依存関数である。Alphaのようにセグメントがない アーキテクチャの場合は、これらは通常のコピー操作を行う。 i386の場合、これらは異なったセグメント間でコピーするための インライン・アセンブラ関数になっている。この関数の名称は、 ユーザ・セグメントのセグメント・ディスクリプタとして使用 される、i386の fs レジスタから来ている。

get_{user,fs}_{byte,word,long}()
ユーザ空間の addr からカーネル空間へ、1バイト/1ワード/ 1 long 値を返す。

put_{user,fs}_{byte,word,long}()
カーネル空間から値 val をユーザ空間の addr へコピーする。

__generic_memcpy_tofs()
カーネル空間にある src からユーザ空間にある dest へ n バイト コピーする。この関数は n が定数でない場合に memcpy_tofs から使用される。この関数は、すべてのアーキテクチャで使用できる わけではない。

__constant_memcpy_tofs()
カーネル空間にある src からユーザ空間にある dest へ n バイト コピーする。この関数は n がコンパイル時に決定できるような定数 である場合に memcpy_tofs から使われる。この関数は、すべての アーキテクチャで使用できるわけではない。

__generic_memcpy_fromfs()
ユーザ空間にある src からカーネル空間にある dest へ n バイト コピーする。この関数は n が定数でない場合に memcpy_fromfs から使用される。この関数は、すべてのアーキテクチャで使用 できるわけではない。

__constant_memcpy_fromfs()
ユーザ空間にある src からカーネル空間にある dest へ n バイト コピーする。この関数は n がコンパイル時に決定できるような定数 である場合に memcpy_fromfs から使用される。この関数は、すべての アーキテクチャで使用できるわけではない。

memcpy_fromfs()
ユーザ空間にある src からカーネル空間にある dest へ n バイト コピーする。i386では、n が gcc からの__builtin_constant_p(n) で渡される定数であるかどうかにより、コンパイル時に決定される。 n が定数であれば __constant_memcpy_fromfs() が使用され、そうで なければ __generic_memcpy_fromfs() が使用される。

memcpy_tofs()
カーネル空間にある src からユーザ空間にある dest へ n バイト コピーする。i386では、n が gcc からの__builtin_constant_p(n) で渡される定数であるかどうかにより、コンパイル時に決定される。 n が定数であれば __constant_memcpy_tofs() が使用され、そうで なければ __generic_memcpy_tofs() が使用される。

ソース
       linux/include/asm/segment.h
    
関連項目

verify_area(9) --- ユーザ空間へ、またはユーザ空間からの読み書きの パーミッションを検査する。

著者

Linus Torvalds