TTY(4)

명칭
tty - 일반적인 단말에의 인터페이스

서식
#include <sys/ioctl.h>

해설
본섹션에서는 시스템의 단말 드라이버에의 인터페이스를 해설합니다.

  단말형 특수 파일
시스템상의 각 하드웨어 단말 포트는, 통상 디렉토리 ``/dev/'' 안에 있는 단말형 특수 디바이스 파일 (예를 들면 ``/dev/tty03'' 등)에 관련지을 수 있습니다. 유저가 이러한 하드웨어 단말 포트로부터 시스템에 로그인했을 때에는, 시스템은 벌써 관련하는 디바이스를 오픈하고 있어, 통상의 대화적 이용을 위해서(때문에) 회선을 준비해 있습니다 ( getty(8) (을)를 참조). 한편, 하드웨어 단말 포트에가 아니고, 다른 프로그램에 접속하는 특별한 단말형 파일도 있습니다. 그렇게 말한 특별한 단말 디바이스는 유사 단말 (pty) (으)로 불려 네트워크 넘어로 (예를 들면 rlogin(1) (이)나 telnet(1) (을)를 이용해) 로그인할 때에, 로그인처의 시스템에 대해서 같은 인터페이스를 유저에게 주는데 필요한 기구를 제공합니다. 그러한 경우에도, 단말형 파일이 어떻게 오픈되고 준비되었는가라고 한 섬세한 (일)것은, 시스템 내부의 특별한 소프트웨어가 벌써 처리해 주고 있습니다. 이러한 상태로, 유저는 통상 어떻게 이러한 회선을 오픈해 이용하는가 한 섬세한 일로 기분을 돌릴 필요는 없습니다. 또, 이러한 회선은 (발신 모뎀을 통해) 시스템의 dial out에도 잘 사용됩니다만, 그 경우에도, 이러한 단말형 특수 파일에의 액세스의 상세를 숨겨 주는 프로그램을 시스템이 제공합니다 ( tip(1) 참조).

유저가 대화적으로 로그인했을 때, 시스템은 그 회선을 있는 양식 ( 회선 제어 규칙 (line discipline) (으)로 불립니다)에 따르는 동작을 하는 대로 준비합니다. 회선 제어 규칙의 자세한 것은, 명령 레벨에서는 stty(1) 에, 프로그래밍 레벨에서는 termios(4) 에 해설이 되고 있습니다. 유저는 독자적인 로그인 단말에 관한 설정을 변경하려고 생각할지도 모릅니다. 그럴 때는, 먼저 드는 편의 메뉴얼 페이지를 참조해 자주 있는 사례를 조사하면(자) 좋을 것입니다. 본메뉴얼 페이지의 나머지에서는, 단말 디바이스를 저레벨로 사용하거나 제어하거나 할 때의 상세한 것에 대하여 해설합니다. 아마, 시스템의 제공하는 기능과 닮은 것을 제공하려고 하는 프로그램에서는 필요한 일이지요.

  회선 제어 규칙
단말형 파일은, 표준 시스템 콜을 이용해 오픈, 읽어들여, 기입을 할 수 있다고 한다 점으로 시스템중의 다른 파일과 같이 사용됩니다. 존재하는 단말형 파일 각각 다해 회선 제어 규칙 (으)로 불리는 소프트웨어 처리 모듈을 관련지을 수 있습니다. 회선 제어 규칙 (은)는, 본질적으로는, 저레벨의 디바이스 드라이버의 코드와 고레벨의 일반 인터페이스 routine ( read(2) (이)나 write(2) 등)을 묶어 그 디바이스에 대한 시멘틱스를 실장하는 역할을 가집니다. 최초로 단말형 파일이 프로그램으로부터 오픈되면(자), termios 회선 제어 규칙으로 불리는 디폴트의 회선 제어 규칙 하지만 그 파일에 관련지을 수 있습니다. 이것은 대부분의 경우로 이용되는 주요한 회선 제어 규칙이며, 통상, 유저가 단말에 관련짓는 것 같은 시멘틱스를 제공합니다. termios 회선 제어 규칙이 유효하게 되면(자), 단말형 파일은 termios(4) 그리고 기술되고 있는 규칙에 따라 동작해, 조작됩니다. 단말 시멘틱스의 완전한 해설에 대해서는 termios 메뉴얼 페이지를 참조해 주세요. 이 메뉴얼 페이지로 해설되고 있는 조작은, 일반적으로 모든 회선 제어 규칙 에 대해서 공통된 기능을 나타내고 있습니다. 그러나, 이러한 안에는 termios 이외의 회선 제어 규칙과 함께 사용해도 의미가 없는 호출이나, 하드웨어로 서포트되어 있지 않다 (또는, 유사 단말의 경우와 같이, 하드웨어 자체를 가지지 않기 때문에 사용할 수 없다) 물건도 있습니다.

  단말형 파일의 조작
다음에 드는 조작은 모두 시스템 콜 ioctl(2) (을)를 사용해 불려 갑니다. 파라미터 request (와)과 argp 의 설명에 대해서는 ioctl 메뉴얼 페이지를 참조해 주세요. 여기에 정의되고 있는 ioctl 리퀘스트 에 가세해 유효가 된 회선 제어 규칙에 따라서는 특유의 리퀘스트 (을)를 그 밖에 정의하고 있는 일도 있습니다 (실제는, termios(4) (은)는 그것들을 ioctl 리퀘스트 (은)는 아니고 함수 호출로서 정의하고 있습니다). 다음의 섹션에서는 이용 가능한 ioctl 리퀘스트를 열거합니다. 리퀘스트명, 그 이용 목적의 설명, 그리고 (파라미터를 취하는 경우는) 형태를 나타냈다 argp 파라미터를 적습니다. 예를 들면, 최초의 항목에서는

    TIOCSETD int *ldisc

그렇다고 하는 기술이 있습니다. 이것은, 다음과 같은 부분 코드를 이용해 파일 기술자 0 에 관련지을 수 있었던 단말상에서 불려 가겠지요.

    	int ldisc;
    	ldisc = TTYDISC;
    	ioctl(0, TIOCSETD, &ldisc);

  단말형 파일용 리퀘스트의 해설

TIOCSETD int *ldisc
    ldisc 하지만 가리키는 새로운 회선 규칙으로 변경합니다. 이용 가능한 회선 제어 규칙은 ~ <sys/ttycom.h> 에 열거되고 있습니다. 현재는 다음의 것이 이용 가능합니다:

    TTYDISC
        termios 대화적 회선 제어 규칙
    TABLDISC
        타블렛 회선 제어 규칙
    SLIPDISC
        시리얼 IP 회선 제어 규칙
    PPPDISC
        PPP 회선 제어 규칙

TIOCGETD int *ldisc
    ldisc (이)가 가리키는 정수에 현재의 회선 제어 규칙을 돌려줍니다.

TIOCSBRK void
    단말 하드웨어를 브레이크 (BREAK) 조건으로 설정합니다.

TIOCCBRK void
    단말 하드웨어의 브레이크 조건을 클리어 합니다.

TIOCSDTR void
    데이터 단말 레이디 (DTR)를 유효하게 합니다.

TIOCCDTR void
    데이터 단말 레이디 (DTR)를 클리어 합니다.

TIOCGPGRP int *tpgrp
    단말을 관련지을 수 있고 있는 현재의 프로세스 그룹을 tpgrp (이)가 가리키는 정수에 돌려줍니다. 이것은 termios(4) 의 tcgetattr() 호출을 실장하고 있는 하위의 호출입니다.

TIOCSPGRP int *tpgrp
    tpgrp (이)가 가리키는 프로세스 그룹 (정수)에 단말을 관련짓습니다. 이것은 termios(4) 의 tcsetattr() 호출을 실장하고 있는 하위의 호출입니다.

TIOCGETA struct termios *term
    디바이스를 관련지을 수 있고 있는 현재의 termios 상태를 term (이)가 가리키는 termios 구조체에 대입합니다. 이것은 termios(4) 의 tcgetattr() 호출을 실장하고 있는 하위의 호출입니다.

TIOCSETA struct termios *term
    디바이스에 관련지을 수 있고 있는 termios 상태를 즉석에서 설정합니다. 이것은 termios(4) 의 tcsetattr() 에 TCSANOW 옵션을 건네주었을 경우의 호출을 실장하고 있는 하위의 호출입니다.

TIOCSETAW struct termios *term
    우선 출력이 모두 완료하는 것을 기다려, 그리고 디바이스에 관련지을 수 있었다 termios 상태를 설정합니다. 이것은 termios(4) 의 tcsetattr() 에 TCSADRAIN 옵션을 건네주었을 경우의 호출을 실장하고 있는 하위의 호출입니다.

TIOCSETAF struct termios *term
    우선 출력이 모두 완료하는 것을 기다려, 보류되고 있는 입력을 클리어 해, 그리고 디바이스에 관련지을 수 있었던 termios 상태를 설정합니다. 이것은 termios(4) 의 tcsetattr() 에 TCSAFLUSH 옵션을 건네주었을 경우의 호출을 실장하고 있는 하위의 호출입니다.

TIOCOUTQ int *num
    현재의 출력 큐에 있는 캐릭터수를 num (이)가 가리키는 정수에 대입합니다.

TIOCSTI char *cp
    타이핑 입력을 시뮬레이트 합니다. 단말이 cp (이)가 가리키는 캐릭터 입력을 받았는지와 같이 가장합니다.

TIOCNOTTY void
    이 호출은 시대착오입니다만, 호환성을 위해서(때문에) 남아 있습니다. 이전에는, 제어 단말 ( termios(4) 의 단말 제어 섹션을 참조)를 가지지 않는 프로세스가 최초로 단말 디바이스를 오픈했을 때, 그 단말을 프로세스의 제어 단말로서 이용할 수 있었습니다. 프로그램에 따라서는 처음은 제어 단말을 필요로 하지 않는 경우도 있으므로, 이것은 위험한 일이었습니다. 거기서 이 호출은, 프로세스로부터 제어 단말을 떼어내는 기능을 제공하고 있었습니다. 파일 /dev/tty (을)를 오픈해, 그 파일 기술자로 TIOCNOTTY (을)를 호출하지 않으면 되지 않습니다.

    현재의 시스템에서는, open() 호출에 대해 프로세스에 제어 단말을 할당하는 일은 하지 않습니다. 단말을 제어 단말로 하기 위한 TIOSCTTY 그렇다고 하는 특별한 ioctl 가 존재합니다. 또, 프로그램중에서 fork() (을)를 행동 setsid() 시스템 콜을 호출해, 프로세스를 전용의 세션에 둘 수도 있습니다. 그렇다면 프로세스를 제어 단말로부터 떼어내는 효과가 있습니다. 프로그램중에서 제어 단말을 없애려면 , 이쪽이 새롭고, 바람직한 방법입니다.

TIOCSTOP void
    (키보드로부터 ^S 를 입력하도록(듯이)) 단말의 출력을 멈춥니다.

TIOCSTART void
    (키보드로부터 ^Q 를 입력하도록(듯이)) 단말의 출력을 개시합니다.

TIOCSCTTY void
    단말을 프로세스의 제어 단말로 합니다 (이 때 프로세스는 제어 단말을 가지고 있어서는 안됩니다).

TIOCDRAIN void
    모든 출력이 끝날 때까지 기다립니다.

TIOCEXCL void
    단말을 전유 사용하도록(듯이) 설정합니다. 이후, root 이외가 이 단말을 오픈할 수 없습니다. 물론, root 에 의해 실행된 (혹은 setuid 된) 프로그램은 이 전유 설정에는 따르지 않습니다. 이것에 의해, 이 기능의 유용성이 제한되게 됩니다.

TIOCNXCL void
    단말의 전유 사용을 취소합니다. 이후, 이 단말을 오픈할 수 있게 됩니다.

TIOCFLUSH int *what
    what (이)가 가리키는 정수치가 ~ <sys/file.h> 에 정의되고 있다 FREAD 비트를 포함한다면, 입력 큐에 있는 캐릭터는 모두 소거됩니다. FWRITE 비트를 포함한다면, 출력 큐에 있는 캐릭터는 모두 소거됩니다. 정수치가 0 이라면, FREAD 비트와 FWRITE 비트의 양쪽 모두가 세트 되어 있는 것과 같게 동작합니다 (즉 양쪽 모두의 큐를 클리어 합니다).

TIOCGWINSZ struct winsize *ws
    단말에 관련지을 수 있었던 윈도우의 사이즈 정보를 ws (이)가 가리킨다 winsize 구조체에 대입합니다. 윈도우 사이즈의 구조체는, 단말에 접속된 디바이스의 행수와 자리수 (적절한 경우에는 픽셀수도)(을)를 보관 유지합니다. 이것은 유저 소프트웨어에 의해 설정되어 전화면 지향의 프로그램의 대부분이 이 방법으로 화면 사이즈를 결정합니다. winsize 구조체는 ~ <sys/ioctl.h> 에 정의되고 있습니다.

TIOCSWINSZ struct winsize *ws
    단말에 관련지을 수 있었던 윈도우의 사이즈를 ws (이)가 가리킨다 winsize 구조체 (상기 참조) 중의 값으로 설정합니다.

TIOCCONS int *on
    on 하지만 0 이외의 정수를 가리키고 있으면, 커널 콘솔의 출력 (커넬의 printf 처) (을)를 이 단말에 리디렉트 합니다. on 하지만 정수 0 을 가리키고 있으면, 커널 콘솔의 출력을 통상의 콘솔에 되돌립니다. 이것은 보통, 워크스테이션상에서 커널 메세지를 특정의 윈도우에 리디렉트 하는데 사용됩니다.

TIOCMSET int *state
    state (이)가 가리키는 정수는, 모뎀 상태에 대응하는 비트를 포함합니다. 다음의 리스트는 정의가 끝난 변수와 그것이 나타내는 모뎀 상태입니다:

    TIOCM_LE
        회선 이용 가능 (Line Enable)
    TIOCM_DTR
        데이터 단말 레이디 (Data Terminal Ready)
    TIOCM_RTS
        송신 요구 (Request To Send)
    TIOCM_ST
        종국 송신 (Secondary Transmit)
    TIOCM_SR
        종국 수신 (Secondary Receive)
    TIOCM_CTS
        송신가능 (Clear To Send)
    TIOCM_CAR
        캐리어 검출 (Carrier Detect)
    TIOCM_CD
        캐리어 검출 (별칭)
    TIOCM_RNG
        피호 표시 (Ring Indication)
    TIOCM_RI
        피호 표시 (별칭)
    TIOCM_DSR
        데이터 세트 레이디 (Data Set Ready)

    이 호출은, 단말 모뎀을 state (이)가 나타내는 상태로 설정합니다. 모든 단말이 이 호출을 서포트하고 있다고는 할 수 없습니다.

TIOCMGET int *state
    상기와 같은 단말 모뎀 회선의 현재 상태를 state (이)가 가리키는 정수에 돌려줍니다.

TIOCMBIS int *state
    state (이)가 가리키는 정수가 포함한 비트는, 상기와 같은 모뎀 상태를 나타냅니다만, 현재 상태와의 OR (화)가 설정됩니다.

TIOCMBIC int *state
    state (이)가 가리키는 정수가 포함한 비트는, 상기와 같은 모뎀 상태를 나타냅니다만, state 안으로 온이 되어 있는 각 비트를 단말중에서 클리어 합니다.

관련 항목
stty(1), ioctl(2), pty(4), termios(4), getty(8)