Canonical
터미널 입력은 새줄문자('\n'), EOF, 또는 EOL 문자들로 종료되는 한 라인으로 처리 된다. 어떤 입력도 사용자에 의해 한 라인 전체의 입력이 종료되기 전에 읽혀질 수 없고, read 함수는 얼마나 많은 바이트가 요청되었는지에 상관없이, 많아야 오직 한 줄의 입력을 반환할 뿐이다.
NonCanonical
문자들은 라인들로 묶여지지 않고, ERASE와 KILL 프로세싱은 수행되지 않는다. 비정규입력에서(NonCanonical) 읽혀진 바이트들은 MIN과 TIME을 설정함으로 인해서 제어 된다.
MIN -> 읽어 들은 문자 갯수
TIME -> MIN에서 읽어 들인 문자 갯수가 충족되지 않을시 설정한 시간에 OUT
int tcgetattr(int fd, struct termios *p)
파일기술자와 연관된 터이널 디바이스의 속성을 시험하는데 사용된다. 그 속성은 구조체 p가 가리키는 곳으로 반환된다.
int tcsetattr(int fd, int when, const struct termios *p)
파일기술자와 연관된 터미널 디바이스의 속성을 설정한다. 새로운 속성들은 구조체 p가 가리키고 있는 곳으로부터 가져온다. when 인수는 이미 큐된(큐에 저장되어 있는) 입력과 출력을 어떻게 취급할 것인지를 정하는 것으로 다음 값들 중 하나를 사용할 수 있다.
TCSANOW |
즉시 속성을 변경시켜라. |
TCSADRAIN |
큐에 저장된 출력이 쓰여질 때까지 기다린 후에 속성을 변경하라. 당신은 변경하는 파라미터가 출력에 영향을 미칠 때 이 옵션을 사용한다. |
TCSAFLUSH |
이것은 TCSADRAIN과 같지만, 큐에 저장된 입력을 버린다. |
TCASASOFT |
위에 있는 어떤 것과도 덧붙여 사용할 수 있는 플래그 비트이다. 이것은 하드웨어에 대한 상황의 변경을 금지하기 위한 것이다. 이것은 BSD 확장이다. BSD가 아닌 시스템에서는 아무런 영향을 받지 않는다. |
O_NOTTY : open 하려는 process에 대해 device를 controlling terminal로 할당하지 말라는 것이다.
controlling terminal : process가 foreground이며, device가 현재 terminal을 제어함을 의미
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
c_cc에서 사용가능한 매크로
정규모드(canonical)에서 배열의 인덱스
-VEOF : EOF 문자
-VEOL : EOL 문자
-VERASE : ERASE 문자
-VINTR : INTR 문자
-VKILL : KILL 문자
-VQUIT : QUIT 문자
-VSUSP : SUSP 문자
-VSTART : START 문자
-VSTOP : STOP 문자
비정규 모드(non-canonical)에서 배열의 인덱스는 다음과 같다
-VINTR : INTR 문자
-VMIN : MIN 문자
-VQUIT : SUSP 문자
-VTIME : TIME 값
-VSTART : START 문자
-VSTOP : STOP 문자
특수 문자와 비정규 모드에서의 MIN과 TIME은 입력 문자를 발전적으로 처리하는데 있어서 매우 중요하다.
TIME 과 MIN 값 - 비정규 모드에서 사용되고, 입력으로 부터 읽어들이기를 제어 하는데 함께 사용된다. 프로그램이 터미널과 연관된 파일 기술자로 부터 읽기를 시도할때 일어나는 사건을 제어한다.
-MIN=0이고 TIME=0 : read는 항상 즉시 리턴한다.
-MIN=0이고 TIME>0 : read는 읽어들일 문자가 있거나, TIME/10초가 경과했을 때 리턴한다.
-MIN>0이고 TIME=0 : read는 MIN개의 문자를 읽을 때까지 기다릴 것이고, 읽어들인 문자의 개수를 리턴할 것이다. 파일의 끝이라면 0을 리턴한다.
-MIN>0이고 TIME>0 : read가 호출 되었을때 읽어들일 문자를 기다린다. 첫 번째 문자가 도착하면이제 타이머가 작동한다. read는 MIN개의 문자를 읽어들였거나 타이머가 TIME/10초 만큼 경과했을 때에 리턴할 것이다.
출 처 : http://hano1030.springnote.com/pages/2748626.xhtml