MODIFY_LDT(2)

名前
modify_ldt - ldt を設定または取得する

書式
#include <linux/ldt.h>
#include <linux/unistd.h>

_syscall3( int, modify_ldt, int, func, void *, ptr, unsigned long, bytecount )

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 は modify_ldt_ldt_s 構造体を指し、 bytecount はこの構造体の大きさに等しくなければならない。

返り値
成功した場合は、 modify_ldt は(読み込みの場合は)実際に読み込んだバイト数、 または(書き込みの場合は)ゼロを返す。 失敗した場合は modify_ldt は -1 を返し、 errno を設定する。

エラー

ENOSYS
    func が 0 でも 1 でもない。

EINVAL
    ptr が 0 である、 または func が 1 で bytecount が modify_ldt_ldt_s 構造体のサイズと等しくないか、 func が 1 で新しい ldt エントリが不正な値である。

EFAULT
    ptr がアドレス空間の外を指している。

準拠
このコールは Linux 特有であり、移植を意図したプログラムでは 使用してはいけない。

関連項目
vm86(2)