다음 위로 이전 목차 리눅스 프로그래머를 위한 가이드

10.3 단말기 I/O (Terminal I/O)

신호에서 처럼, 단말기 입출력 통제 (terminal I/O control)는 SVR4,BSD와 POSIX.1에서 세가지 다른 구현들을 갖는다.

SVR4는 단말기 장치상에서 termio 구조체를 가지고 파라미터들(parameters)을 지정하고 얻기위해 (TCSETA,TCGETA 등과 같은) 다양한 ioctl 호출들과 termio 구조체를 사용한다. 이 구조체를 살펴보자.:

  struct termio {
    unsigned short c_iflag;  /* Input modes */
    unsigned short c_oflag;  /* Output modes */
    unsigned short c_cflag;  /* Control modes */
    unsigned short c_lflag;  /* Line discipline modes */
    char c_line;             /* Line discipline */
    unsigned char c_cc[NCC]; /* Control characters */
  };

BSD에서, sgtty 구조체는 TIOCGETP,TIOCSETP 등과 같은 다양한 ioctl 호출을 가지고 사용된다.

POSIX에서, termios 구조는 tcsetattr, tcgetattr과 같이 POSIX.1에 의해 정의된 다양한 함수들에 따라 사용된다. termios 구조체는 SVR4에 의해 사용되는 struct termio와 동일하지만, 그 타입들은 (unsigned short 대신의 tcflag_t와 같이) 재명명(rename)되고 NCCS는 c_cc 배열의 크기를 위해 사용된다.

리눅스에서, POSIX.1 termios와 SVR4 termio 두가지 모두 커널에 의해 직접적으로 지원된다. 이것은 당신의 프로그램이 단말기 입출력 접근(terminal I/O accessing)을 위한 이러한 방법들 중 하나를 사용한다면, 리눅스에서 직접 컴파일해야함을 의미한다. 의심스럽다면, termios을 사용하기 위해 termio를 사용하는 코드를 두 방법의 작은 지식을 사용하여 쉽게 수정할 수 있다. 잘된다면, 이것은 꼭 필요하지는 않지만, 프로그램이 termio 구조체 안에 c_line 필드을 사용하기를 시도한다면 주의를 기울여라. 거의 모든 응용프로그램을 위해 이것은 N_TTY이여야 하고, 프로그램이 몇몇 다른 줄 규율(line discipline)이 사용가능하다고 가정한다면 문제가 생길지도 모른다.

당신의 프로그램이 BSD sgtty 구현을 사용한다면, 위에서 설명한 것처럼 libbsd.a에 대하여 링크를 사용할 수 있다. 이것은 ioctl를 위해 대체물을 제공할 것이고 그것은 커널에 의해 사용되는 POSIX termios 호출에 관하여 단말기 입출력(terminal I/O) 요청들을 다시 제출할 것이다. 어떤 프로그램을 컴파일할 때, TIOCGETP와 같은 상징들(symbols)이 정의되어 있지 않다면, libbsd에 대해 연결(link)해야할 필요가 있을 것이다.


이전:10.2.4 리눅스에서 지원되는 신호들 다음:10.4 프로세스 정보와 통제
[홈페이지] [데이타베이스] [프로그래밍] [수퍼브가] [컴퓨터게임] [잡다한것들]

Copyright (c) 1996,1997 by Euibeom.Hwang & SangEun.Oh All Rights Reserved

Email To:Webmaster , Another address
LAST UPDATE Dec 19,1997
Created Dec 19,1997