MODIFY_LDT
Section: Linux Programmer's Manual (2)
Updated: 2007-06-01
Index
JM Home Page
roff page
 
名前
modify_ldt - ldt を設定または取得する
 
書式
#include <sys/types.h>
int modify_ldt(int func, void *ptr, unsigned long bytecount);
 
説明
modify_ldt()
はプロセスのローカル・ディスクリプタ・テーブル (local descriptor table; ldt)
を読み書きする。
ldt は i386 プロセッサで使用されるプロセスごとのメモリ管理テーブルである。
このテーブルに関してのより詳しい情報は Intel 386 processor handbook を
参照すること。
func
が 0 ならば、
modify_ldt()
は ldt を
ptr
が指しているメモリに読み込む。
読み込むバイト数は実際の ldt のサイズか
bytecount
より小さい方である。
func
が 1 ならば、
modify_ldt()
は ldt エントリの一つを変更する。
ptr
は
user_desc
構造体を指し、
bytecount
はこの構造体の大きさに等しくなければならない。
user_desc
構造体は <asm/ldt.h> で以下のように定義されている:
struct user_desc {
    unsigned int  entry_number;
    unsigned long base_addr;
    unsigned int  limit;
    unsigned int  seg_32bit:1;
    unsigned int  contents:2;
    unsigned int  read_exec_only:1;
    unsigned int  limit_in_pages:1;
    unsigned int  seg_not_present:1;
    unsigned int  useable:1;
};
Linux 2.4 以前では、この構造体は
modify_ldt_ldt_s
という名前であった。
 
返り値
成功した場合は、
modify_ldt()
は (読み込みの場合は) 実際に読み込んだバイト数、
または (書き込みの場合は) 0 を返す。
失敗した場合は
modify_ldt()
は -1 を返し、
errno
をエラーを示す値に設定する。
 
エラー
- EFAULT
 - 
ptr
がアドレス空間の外を指している。
 - EINVAL
 - 
ptr
が 0 である、
または
func
が 1 で
bytecount
が
modify_ldt_ldt_s
構造体のサイズと等しくないか、
func
が 1 で新しい ldt エントリが無効な値である。
 - ENOSYS
 - 
func
が 0 でも 1 でもない。
 
 
準拠
このコールは Linux 特有であり、移植を意図したプログラムでは
使用してはいけない。
 
注意
glibc はこのシステムコールに対するラッパー関数を提供していない。
syscall(2)
を使って呼び出すこと。
 
関連項目
vm86(2)
 Index
- 名前
 - 
 - 書式
 - 
 - 説明
 - 
 - 返り値
 - 
 - エラー
 - 
 - 準拠
 - 
 - 注意
 - 
 - 関連項目
 - 
 
This document was created by
man2html,
using the manual pages.
Time: 04:31:53 GMT, November 19, 2007