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







+ Recent posts