CONSOLE_IOCTLS(4)

이름
console ioctl - 콘솔 터미널과 가상 터미널을 위해 입출력제어를 한다.

설명
WARNING: 다음 정보를 사용하는것은 무의미 하다. WARNING: 입출력제어에 관한 내용은 문서화 되지 않아 공지없이 바뀌기 쉽다. POSIX함수를 사용한다.

KDGETLED
    argp LEDs의 상태를 얻는다. argp는 long int를 가리킨다. argp의 저수준의 세개비트는 아래와 같은 LEDs의 상태로 설정된다:
        LED_CAP 0x04 caps lock led
        LEC_NUM 0x02 num lock led
        LED_SCR 0x01 scroll lock led

KDSETLED
    LEDs설정. LEDs는 argp의 세 비트보다 낮게 설정된다. 그러나, 비트를 높게 설정 한다면 LEDs는 표준으로 전환된다: caps lock,num lock, scroll lock 키보드기능의 디스플레이 상태.

버전 1.1.54이전의 LEDs는 단지 일치하는 키보드 플래그의 상태를 반영한다. 그리고 KDGTLED/KDSTLED는 또한 키보드 플래그를 바꾼다. 버전1.1.54부터 LEDs는 상황에 따라 디스클레이를 조절한다. 그러나 기본값에 의해 leds는 키보드플래그를 디스플레이한다. 다음 두개의 입출력제어는 키보드플래그 에 액세스하는데 사용된다.

KDGKBLED
    capsLock, NumLock,ScrollLock와 같은 키보드 플래그를 취한다. argp는 플래그상태를 설정하는 char를 가리킨다. 저수준 지정 비트(mask 0x7)는 현재 플래그 상태를 취하고, 나머지는 기본 플래그 상태를 취한다.

KDSKBLED
    CapsLock, NumLock, ScrollLock같은 키보드플래그를 설정한다. argp는 원하는 플래그 상태를 갖는다. 저수준 지정 비트는 현재 플래그 상태를 취하고, 나머지는 기본 플래그 상태를 취한다.

KDGKBTYPE
    키보드 타입을 취한다. 이것은 0x02로 정의되는 KB_101값을 반환한다.

KDADDIO
    유효한 입출력 포트를 추가한다. ioperm(arg,1,1)과 같다.

KDDELIO
    유효한 입출력 포트를 삭제한다. ioperm(arg,1,0)과 같다.

KDENABIO
    비디오보드로 입출력이 가능하다. ioperm(0x3b4, 0x3df-0x3b4+1,1)과 같다.

KDDISABIO
    비디오보드로 입출력이 불가능하다. ioperm(0x3b4, 0x3df-0x3b4+1,0)과 같다.

KDSETMODE
    텍스트/그래픽 모드를 설정한다. argp는 다음중 하나다:
        KD_TEXT 0x00
        KD_GRAPHICS 0x01

KDGETMODE
    텍스트/그래픽 모드를 취한다. argp는 위의 값중 하나를 설정하는 long 을 가리킨다.

KDMKTONE
    특정 길이의 톤(tone)생성한다. argp의 낮은 16비트는 시간사이클의 기간을 열거하고, 높은 16비트는 msec에 기간을 준다. 기간이 0이면, 소리는 즉시 꺼진다. 제어력 즉시 반환된다.

KIOCSOUND
    사운드 생성을 시작하거나 멈춘다. argp의 낮은 16비트는 시간사이클의 기간 을 열거한다.(즉, argp = 1193180/frequency) argp = 0은 소리를 끈다. 같은 경우로, 제어력은 즉시 반환된다.

GIO_CMAP
    커널로부터 현재 기본 컬러맵을 얻는다. argp는 48-바이트 배열을 가 리킨다.(버전 1.3.3부터)

PIO_CMAP
    기본 텍스트모드 컬러맵을 바꾼다. argp는 16비트컬러를 위한 빨강,녹색, 파랑색값을 포함하는 48-바이트 배열을 가리킨다: 0 is off, and 255 is full intensity. 기본색은 검정, 암적색(dark red), 암녹색(dark green), 갈색, 암청색(dark blue), 밝은 빨강, 밝은 녹색, 노랑, 밝은 파랑, 밝은 자주, 밝은 청록색, 흰색이다.

GIO_FONT
    확장된 256-문자 폰트를 취한다. argp는 8192바이트 배열을 가리킨다. 현재 로드된 폰트가 512-문자 폰트이거나 콘솔이 텍스트 모드가 아니라면 EINVAR코드와 함께 작동하지 않는다.

GIO_FONTX
    화면폰트와 관련정보를 얻는다. argp는 consolefontdisc을 가리킨다. (PIO_FONTX 참조). 호출시 charcount필드는 문자중 가장큰 수치 로 설정되어야 한다. 반환시, charcount와 charheight는 현재 로드된 폰트를 위한 관련 데이타로 채워져야 한다. 그리고 chardata배열은 charcount의 초기값이 지시하는 충분한 공간이 있다면 폰트데이타를 포함한다. 그렇지 않으면 버퍼는 그대로 있고, errno는 ENOMEM를 설정한다.(버전 1.3.1부터)

PIO_FONT
    화면 폰트를 256-문자로 설정한다. EGA/VGA문자생성기로부터 폰트를 로드한다. argp는 문자마다 32바이트인 8192맵을 가리킨다. 단지 그런것들 중 첫 N는 8xN폰트를 위해 사용된다(0 < N <= 32). 이 호출은 또한 유니코드를 쓸모 없게 한다.

PIO_FONTX
    스크린 폰트와 관련정보를 설정한다. argp는
     consolefontdesc {
            u_short charcount;      /* characters in font (256 or 512) */
            u_short charheight;     /* scan lines per character (1-32) */
            char *chardata;         /* font data in expanded form */
    };
    를 가리킨다. 필요하다면, 화면크기는 적절하게 재조정될 것이고, SIGWINCH는 적절한 프로세 스를 보낸다. 이 호출은 또한 유니코드를 쓸모 없게 한다.

PIO_FONTRESET
    폰트, 크기, 유니코드를 재설정한다. argp는 사용되지 않지만, 리눅스의 차후버전의 호환을 위해 NULL는 설정되어야 한다.

GIO_SCRNMAP
    커널로부터 화면 맵핑을 얻는다. argp는 E_TABSZ의 범위를 가리킨다. 그것은 각 문자 디스플레에 사용되는 폰트 위치와 함께 로드된다. 이 호출 은 로드된 폰트가 256문자 이상이면 쓸모없는 정보를 반환할 것이다.

PIO_SCRNMAP
    콘솔 화면 심볼의 맵바이트인 커널의 ``user definable``을 로드한다. argp는 size E_TABSZ의 공간에 포인트한다.

PIO_UNISCRNMAP
    유니코드의 맵바이트인 커널의 ``user definable``을 로드한다. ?

GIO_UNIMAP
    커널로부터 Unicode-to-font를 구한다. argp는
    struct unimapdesc {
            u_short entry_ct;
            struct unipair *entries;
    };
    where entries points to an array of
    struct unipair {
            u_short unicode;
            u_short fontpos;
    };
    를 가리킨다. (Since 1.1.92.)

PIO_UNIMAPCLR
    hash 알고리즘을 참조해 테이블을 소거한다. argp는
    struct unimapinit {
            u_short advised_hashsize;  /* 0 if no opinion */
            u_short advised_hashstep;  /* 0 if no opinion */
            u_short advised_hashlevel; /* 0 if no opinion */
    };
    를 가리킨다. (버전1.1.92부터.)

KDGKBMODE
    현재 키보드 모드를 구한다. ARGP는 다음중 하나로 설정된 long을 포인트한다.
        K_RAW 0x00
        K_XLATE 0x01
        K_MEDIUMRAW 0x02
        K_UNICODE 0x03

KDSKBMODE
    현재 키보드 모드를 설정한다. argp는 위의 값중 하나와 같은 long이다.

KDGKBMETA
    메타키 운용모드를 구한다. argp는 다음중 하나를 설정하는 long을 포인트한다.
        K_METABIT 0x03 set high order bit
        K_ESCPREFIX 0x04 escape prefix

KDSKBMETA
    메타키 운용모드를 설정한다. argp는 위의 값중 하나와 같은 long이다.

KDGKBSENT
    함수키구문을 얻는다. argp는
    struct kbsentry {
        u_char kb_func;
        u_char kb_string[512];
    };
    를 가리킨다. kb_string는 kb_func함수키 활성코드와 일치하는 구문을 설정한다.

KDSKBSENT
    함수키 문자내용(entry)을 설정한다. argp는 구조체 kbsentry를 가리킨다.

KDGETKEYCODE
    커널 키코드 테이블 내용을 읽는다.(키코드로 코드를 스캔한다. argp는
    struct kbkeycode { unsigned int scancode, keycode; };
    를 가리킨다. keycode는 주어진 scancode와 일치하게 설정한다. (89 <= scancode <= 255 only. For 1 <= scancode <= 88, keycode==scancode.) (버전1.1.63부터.)

KDSETKEYCODE
    커널 키코드테이블 기재사항을 기록한다. argp는 구조체 키코드를 포인트한다. (버전1.1.63 부터.)

KDSIGACCEPT
    호출한 프로세스들은 적당한 키조합이 프레스에 의해 생성될때, 프로세스에 의해 시그널 argp를 받아들인다. (1 <= argp <= NSIG). (See spawn_console() in linux/drivers/char/keyboard.c.)

VT_OPENQRY
    유효한 첫 콘솔을 반환한다. argp는 vt(1 <= *argp <= MAX_NR_CONSOLES)의 번호를 설정한 정수를 포인트한다.

VT_GETMODE
    활성화된 vt모드를 구한다. argp는
    struct vt_mode {
        char mode;     /* vt mode */
        char waitv;    /* if set, hang on writes if not active */
        short relsig;  /* signal to raise on release req */
        short acqsig;  /* signal to raise on acquisition */
        short frsig;   /* unused (set to 0) */
    };
    를 포인트한다. mode는 다음 값중 하나를 설정한다.
        VT_AUTO 자동 vt 스위칭
        VT_PROCESS 프로세스 제어 스위칭
        VT_ACKACQ acknowledge switch

VT_SETMODE
    활성화된 vt의 모드를 설정한다. argp는 구조체 vt_mode를 포인트한다.

VT_GETSTATE
    전역 vt상태 정보를 구한다. argp는
    struct vt_stat {
        ushort v_active;  /* active vt */
        ushort v_signal;  /* signal to send */
        ushort v_state;   /* vt bitmask */
    };
    를 포인트한다.

VT_RELDISP
    디스플레이를 릴리즈한다.

VT_ACTIVATE
    vt argp를 전환한다(1 <= argp <= MAX_NR_CONSOLES).

VT_WAITACTIVE
    vt argp가 활성화될때까지 기다린다.

VT_DISALLOCATE
    vt argp와 일치하는 메모리를 Deallocate the memory associated with vt argp. (Since 1.1.54.)

VT_RESIZE
    화면크기의 커널이해(kernel's idea)를 설정한다. argp는
    struct vt_sizes {
        ushort v_rows;       /* # rows */
        ushort v_cols;       /* # columns */
        ushort v_scrollsize; /* no longer used */
    };
    로 포인트한다. 이것으로 비디오모드를 바꿀수 없다는것을 주지한다. resizecons(8) 참조한다. (버전1.1.54부터.)

VT_RESIZEX
    다양한 화면매개변수의 커널이해(kernel's idea)를 설정한다. argp
    struct vt_consize {
            ushort v_rows;          /* 열(줄)번호 */
            ushort v_cols;          /* 행번호 */
            ushort v_vlin;          /* 화면상의 픽셀열 번호 */
            ushort v_clin;          /* 문자별 픽셀열 번호 */
            ushort v_vcol;          /* 화면상의 픽셀행 번호 */
            ushort v_ccol;          /* 문자별 픽셀행 번호 */
    };
    를 포인트한다. 모든 매개변수는 0으로 설정될런지 모른다. 그러나 복수의 매개변수가 설정된다면 일관되어야만 한다. 이것으로 비디오모드를 바꿀수 없다는 것을 주지한다. resizecons(8)를 참조한다. (버전1.3.3부터.)

다음의 입출력제어들은 argp에 의해 구조체포인트 첫번째 바이트에 의존한다. 이것들은 오로지 수퍼유저나 현재 tty의 소유자만이 가능하다.

TIOCLINUX, subcode=0
    화면을 덤프한다. 버전 1.1.92에는 없는 옵션이다.

TIOCLINUX, subcode=1
    처리정보를 얻는다. 1.1.92에는 없다.

TIOCLINUX, subcode=3
    선택한 것을 붙인다. 선택된 버퍼의 문자는 fd에 기록된다.

TIOCLINUX, subcode=4
    화면을 채운다.

TIOCLINUX, subcode=6
    argp는 커널변수 shift_state의 값을 설정하는 char을 포인트한다. (버전1.1.32부터.)

TIOCLINUX, subcode=7
    argp는 커널변수 report_mouse의 값을 설정하는 char을 포인트한다. (버전1.1.33부터.)

TIOCLINUX, subcode=8
    화면 너비와 높이, 커서 위치, 그리고 모든 문자-속성쌍을 덤프한다. (커널 버전1.1.67 에서1.1.91까지만 쓸 수 있다. 커널 1.1.92 이후 버전에서는 대신 /dev/vcsa*에서 읽을 수있다.)

TIOCLINUX, subcode=9
    화면 너비와 높이, 커서 위치, 그리고 모든 문자-속성쌍을 재저장한다. (커널 버전1.1.67 에서1.1.91까지만 쓸 수 있다. 커널 1.1.92 이후 버전에서는 대신 /dev/vcsa*에서 읽을 수있다.)

TIOCLINUX, subcode=10
    신세대모니터의 강력한 저장기능을 다룬다. VESA 화면공백모드는 argp[1]를 설정한다. 그것은 화면공백을 다룬다.
        0: 화면공백은 불가능하다.
        1: 현재 비디오아답터 레지스터 설정이 저장된후 제어기는 수직동기화펄스 전환(turn off)을 프로그램한다. 이것은 모니터를 "standby"모드로 한다. 모니터가 타이머 오프모드가 있다면 그것은 결국 자신을 꺼버린다.
        2: 현재 설정이 저장된후, 수직,수평 동기와 펄스는 꺼진다. 이것은 모니터를 "off"모드로 둔다. 모니터에 타이머 OFF모드가 없거나, 모니터를 즉시 끄고 싶다면 이 옵션을 선택한다. (Caution:는 결국 모니터에 손상을 입힌다.) (Since 1.1.76.)

반환값
에러시 -1을 반환하고, errno는 설정된다.

에러
errno는 아래의 값을 가진다:

EBADF
    파일 디스크립터는 유효치않다.

ENOTTY
    파일 디스크립터는 문자 장치와 일치하지 않거나, 요청을 거부했다.

EINVAL
    파일 파일 디스크립터나 argp는 유효치 않다.

EPERM
    권한 위반.

경고
이 맨페이지(Man page)는 리눅스 콘솔 입출력에 관한 문서가 아니다. 이 맨페이지는 소스를 보고싶어하는 사용자의 호기심에 대안으로 제공되는 것이다. 입출력제어는 문서화되지 않았다. 따라서 경고없이 내용이 바뀔 수 있다는것을 주지하기 바란다. 입출력제어는 커널과 잘알려진 프로그램(fdisk, hdparm, setserisl,tunelp, loadkeys, selection, setfont, etc..) 사이의 통신을 위해 자주 소개되고, 입출력제어는 프로그램의 요구에 따라 변화할 것이다. 입출력제어를 사용하는 프로그램은 다른 버전의 유닉스에 포팅할 수 없다. 그리고 이후 버전에서는 사라질 수도 있다. POSIX함수들을 사용한다.

관련 항목
kbd_mode(1), loadkeys(1), dumpkeys(1), mknod(1), setleds(1), setmetamode(1), ioperm(2), termios(2), execve(2), fcntl(2), console(4), console_codes(4), mt(4), sd(4), tty(4), ttys(4), vcs(4), vcsa(4), charsets(7), mapscrn(8), setfont(8), resizecons(8), /usr/include/linux/kd.h, /usr/include/linux/vt.h