The Posix.TTY 구조
The Posix.TTY 구조
터미널(직렬) I/O 제어 인터페이스를 제공하는 구조예요.
출처: 문서
본문
시놉시스 (Synopsis)
signature POSIX_TTY
structure TTY : POSIX_TTY
인터페이스 (Interface)
eqtype pid
eqtype file_desc
structure V : sig
val eof : int
val eol : int
val erase : int
val intr : int
val kill : int
val min : int
val quit : int
val susp : int
val time : int
val start : int
val stop : int
val nccs : int
type cc
val cc : (int * char) list -> cc
val update : cc * (int * char) list -> cc
val sub : cc * int -> char
end
structure I : sig
include BIT_FLAGS
val brkint : flags
val icrnl : flags
val ignbrk : flags
val igncr : flags
val ignpar : flags
val inlcr : flags
val inpck : flags
val istrip : flags
val ixoff : flags
val ixon : flags
val parmrk : flags
end
structure O : sig
include BIT_FLAGS
val opost : flags
end
structure C : sig
include BIT_FLAGS
val clocal : flags
val cread : flags
val cs5 : flags
val cs6 : flags
val cs7 : flags
val cs8 : flags
val csize : flags
val cstopb : flags
val hupcl : flags
val parenb : flags
val parodd : flags
end
structure L : sig
include BIT_FLAGS
val echo : flags
val echoe : flags
val echok : flags
val echonl : flags
val icanon : flags
val iexten : flags
val isig : flags
val noflsh : flags
val tostop : flags
end
eqtype speed
val compareSpeed : speed * speed -> order
val speedToWord : speed -> SysWord.word
val wordToSpeed : SysWord.word -> speed
val b0 : speed
val b50 : speed
val b75 : speed
val b110 : speed
val b134 : speed
val b150 : speed
val b200 : speed
val b300 : speed
val b600 : speed
val b1200 : speed
val b1800 : speed
val b2400 : speed
val b4800 : speed
val b9600 : speed
val b19200 : speed
val b38400 : speed
type termios
val termios : {
iflag : I.flags,
oflag : O.flags,
cflag : C.flags,
lflag : L.flags,
cc : V.cc,
ispeed : speed,
ospeed : speed
} -> termios
val fieldsOf : termios
-> {
iflag : I.flags,
oflag : O.flags,
cflag : C.flags,
lflag : L.flags,
cc : V.cc,
ispeed : speed,
ospeed : speed
}
val getiflag : termios -> I.flags
val getoflag : termios -> O.flags
val getcflag : termios -> C.flags
val getlflag : termios -> L.flags
val getcc : termios -> V.cc
structure CF : sig
val getospeed : termios -> speed
val getispeed : termios -> speed
val setospeed : termios * speed -> termios
val setispeed : termios * speed -> termios
end
structure TC : sig
eqtype set_action
val sanow : set_action
val sadrain : set_action
val saflush : set_action
eqtype flow_action
val ooff : flow_action
val oon : flow_action
val ioff : flow_action
val ion : flow_action
eqtype queue_sel
val iflush : queue_sel
val oflush : queue_sel
val ioflush : queue_sel
val getattr : file_desc -> termios
val setattr : file_desc * set_action * termios -> unit
val sendbreak : file_desc * int -> unit
val drain : file_desc -> unit
val flush : file_desc * queue_sel -> unit
val flow : file_desc * flow_action -> unit
val getpgrp : file_desc -> pid
val setpgrp : file_desc * pid -> unit
end
설명 (Description)
eqtype pid
터미널 속성 타입과 속성 조회·설정 함수를 담아요.
eqtype file_desc
열린 파일 디스크립터예요.
structure V
V 하위구조는 특수 제어 문자를 지정하는 수단을 제공해요.
val eof : int
val eol : int
val erase : int
val intr : int
val kill : int
val min : int
val quit : int
val susp : int
val time : int
val start : int
val stop : int
특수 제어 문자 EOF, EOL, ERASE, INTR, KILL, MIN, QUIT, SUSP, TIME, START, STOP의 인덱스예요(각각). 이들은 cc와 sub 함수에 쓰이는 인덱스예요.
val nccs : int
특수 문자의 총 개수예요. 따라서 유효한 인덱스는 0부터 nccs-1까지예요.
type cc
장치 드라이버가 사용하는 특수 제어 문자 벡터예요.
cc l
인덱스를 짝지어진 문자에 매핑해 cc 타입의 값을 만들어요. 지정되지 않은 인덱스는 #"\000"과 연관돼요. 예를 들어 문자 #"^D"(control-D)가 EOF(파일 끝) 문자 역할을 하게 하려면 다음을 사용해 cc 값을 만들고, 이를 termios 타입에 넣고 TC.setattr을 호출해요:
cc [(V.eof, #"\^D")]
update (cs, l)
cs의 복사본을 돌려주되, l로 지정된 새 매핑이 원래 매핑을 덮어써요.
sub (cs, i)
cs에서 인덱스 i와 연관된 특수 제어 문자를 돌려줘요. i가 음수이거나 i >= nccs이면 Subscript를 발생시켜요.
structure I
I 하위구조는 입력 제어를 지정하기 위한 플래그를 담고 있어요. 다음 표는 플래그에 대한 간략한 설명을 제공해요. 플래그 이름 설명 brkint 브레이크 시 신호 인터럽트. icrnl 입력 시 CR (#"^M")을 NL (#"\n")로 매핑. ignbrk 브레이크 조건 무시. igncr CR 문자 무시. ignpar 패리티 오류가 있는 문자 무시. inlcr 입력 시 NL을 CR로 매핑. inpck 입력 패리티 검사 활성화. istrip 바이트의 여덟 번째 비트 제거. ixoff 시작/정지 입력 제어 활성화. ixon 시작/정지 출력 제어 활성화. parmrk 패리티 오류 표시.
structure O
O 하위구조는 출력 제어를 지정하기 위한 플래그를 담고 있어요.
val opost : flags
출력 처리를 수행해요.
structure C
C 하위구조는 기본 터미널 하드웨어 제어를 지정하기 위한 플래그를 담고 있어요. 다음 표는 플래그에 대한 간략한 설명을 제공해요. 플래그 이름 설명 clocal 모뎀 상태 라인 무시. cread 수신기 활성화. csize 송수신 모두에 사용되는 바이트당 비트 수의 마스크. 이는 cs5, cs6, cs7, cs8의 합집합이에요. cs5 바이트당 5비트. cs6 바이트당 6비트. cs7 바이트당 7비트. cs8 바이트당 8비트. cstopb 한 개가 아닌 두 개의 정지 비트를 보내도록 지정. hupcl 포트를 연 마지막 프로세스가 닫을 때 모뎀 연결 끊기. parenb 패리티 생성과 검출 활성화. parodd parenb가 설정되면 짝수 대신 홀수 패리티 사용.
structure L
L 하위구조는 다양한 로컬 제어 모드를 지정하기 위한 플래그를 담고 있어요. 다음 표는 플래그에 대한 간략한 설명을 제공해요. 플래그 이름 설명 echo 입력 문자를 터미널로 다시 에코. echoe 정규 모드에서 백스페이스 시 ERASE 문자 에코. echok 정규 모드에서 KILL 문자 에코. echonl 정규 모드에서 echo가 설정되지 않아도 NL 문자 에코. icanon 정규 모드 설정, 지우기와 죽이기 처리를 활성화하고 줄 기반 입력 제공. iexten 확장 기능 활성화. isig 입력 문자가 시그널로 매핑되도록 활성화. noflsh INTR, QUIT, SUSP 문자와 연결된 정상 입력·출력 비우기 비활성화. (Posix.TTY.V 하위구조 참조.) tostop 백그라운드 출력에 대해 Posix.Signal.ttou 전송.
eqtype speed
터미널 입력과 출력 보율(baud rate)이에요.
compareSpeed (sp, sp')
보율 sp가 sp'보다 작으면 LESS, 같으면 EQUAL, 크면 GREATER를 돌려줘요.
val speedToWord : speed -> SysWord.word
val wordToSpeed : SysWord.word -> speed
이들은 speed 값과 기본 워드 표현 사이를 변환해요. wordToSpeed는 결과 값이 주어진 시스템에서 허용되는 속도에 해당하는지 확인하지 않아요.
type termios
터미널과 연관된 속성이에요. termios 함수에 인자로 쓰이는 레코드의 추상 표현으로 작동해요.
val termios : {
iflag : I.flags,
oflag : O.flags,
cflag : C.flags,
lflag : L.flags,
cc : V.cc,
ispeed : speed,
ospeed : speed
} -> termios
주어진 플래그, 특수 문자, 속도로 termios 값을 만들어요.
val fieldsOf : termios
-> {
iflag : I.flags,
oflag : O.flags,
cflag : C.flags,
lflag : L.flags,
cc : V.cc,
ispeed : speed,
ospeed : speed
}
termios 값의 구체적인 표현을 돌려줘요.
val getiflag : termios -> I.flags
val getoflag : termios -> O.flags
val getcflag : termios -> C.flags
val getlflag : termios -> L.flags
val getcc : termios -> V.cc
termios 값에서 구성 필드로의 명백한 투영 함수들이에요.
structure CF
CF 하위구조는 termios 값에서 입력과 출력 보율을 가져오고 설정하는 함수를 담고 있어요.
val getospeed : termios -> speed
val getispeed : termios -> speed
인자의 출력과 입력 보율을 돌려줘요(각각).
setospeed (t, speed)
setispeed (t, speed)
이들은 t의 복사본을 돌려주되, 출력(입력) 속도를 speed로 설정해요.
structure TC
TC 하위구조는 터미널 라인 제어를 처리하기 위한 다양한 타입과 함수를 담고 있어요.
eqtype set_action
이 타입의 값들은 setattr 함수의 동작을 지정해요.
val sanow : set_action
val sadrain : set_action
val saflush : set_action
sanow
변경이 즉시 발생해요.
sadrain
모든 출력이 전송된 후 변경이 발생해요.
saflush
모든 출력이 전송되고 수신되었지만 읽히지 않은 모든 입력이 버려진 후 변경이 발생해요.
eqtype flow_action
이 타입의 값들은 flow 함수의 동작을 지정해요.
val ooff : flow_action
val oon : flow_action
val ioff : flow_action
val ion : flow_action
ooff
출력의 일시 중지를 일으켜요.
oon
일시 중지된 출력을 재시작해요.
ioff
터미널 장치에 STOP 문자 전송을 일으켜 데이터 전송을 멈추게 해요.
ion
터미널 장치에 START 문자 전송을 일으켜 데이터 전송을 재시작하게 해요.
eqtype queue_sel
이 타입의 값들은 flush 함수의 동작을 지정해요.
val iflush : queue_sel
val oflush : queue_sel
val ioflush : queue_sel
iflush
수신되었지만 읽히지 않은 모든 데이터를 비워요.
oflush
쓰였지만 전송되지 않은 모든 데이터를 비워요.
ioflush
쓰였지만 전송되지 않거나 수신되었지만 읽히지 않은 모든 데이터를 버려요.
getattr fd
파일 디스크립터 fd와 연관된 터미널의 속성을 가져와요.
setattr (fd, action, termios)
termios에 지정된 대로 파일 디스크립터 fd와 연관된 터미널의 속성을 설정해요. 변경이 발생하는 시기는 action으로 지정돼요.
sendbreak (fd, t)
연관된 터미널이 비동기 직렬 데이터 전송을 사용하면 0값 비트 시퀀스의 전송을 일으켜요. t가 0이면 최소 4분의 1초, 최대 2분의 1초 동안 0값 비트를 보내요. t가 0이 아니면 구현에서 정의한 시간 동안 0값 비트가 전송돼요.
drain fd
fd에 쓰인 모든 출력이 전송될 때까지 기다려요.
flush (fd, qs)
qs 값에 따라 쓰였지만 전송되지 않았거나 수신되었지만 읽히지 않은 데이터를 버려요.
flow (fd, action)
action 값에 따라 데이터의 전송 또는 수신을 일시 중지하고 재시작해요.
getpgrp fd
fd에 연결된 터미널과 연관된 전경 프로세스 그룹의 프로세스 그룹 ID를 돌려줘요.
setpgrp (fd, pid)
fd와 연관된 전경 프로세스 그룹 ID를 pid로 설정해요.## 더 알아보기 (Learn more)