2016-11-05 7 views
0

내 프로그램에서 사용자가 ctrl + a, b, c, d, e ...를 누를 때를 감지하려고합니다. 각 문자에 대해 다른 작업을합니다. 나는이 : 나는 너무 다른 문자를 감지 할 수있는 방법다른 제어 신호를 어떻게 찾을 수 있습니까?

int main(){ 
    signal(SIGINT, sighandler); 
    while(1) { 
     sleep(1); 
    } 
    return(0); 
} 

void sighandler(int signum){ 
    printf("Caught signal %d, coming out...\n", signum); 
    exit(1); 
} 

가 나는 CTRL + 문자는 할 수 있지만 현재는 Ctrl + C가 감지되는 내용을 제어하고 싶습니다?

+0

대부분의 키는 신호를 보내지 않습니다. 신호 잡기는 제어 문자 입력을 수행하는 방법이 아닙니다. 한 번에 한 글자 씩 ("raw"또는 "cbreak"라고도 함) 볼 수 있습니다. –

답변

1

Ctrl 키 + C는 "제어 신호"아니다.

POSIX 시스템에서

, 단말기는 신호를 전송하기 위해 커널을 세 번 키 누름이 단말로부터의 판독 방법 : Ctrl 키 + 인터럽트 C (SIGINT), 종료를위한 \ Ctrl 키 + (SIGQUIT), Ctrl + Z 일시 중지 (SIGTSTP). 단지 세 (신호 가능한 키 누름)이 있습니다,하지만 기억 - 당신은 POSIX termios 인터페이스를 사용하여 단지+ Ctrl 키 어떤 약 조합에 키 누름을 무시할 수 있습니다.

그것은 훨씬 더 일반적인 응용 프로그램이 커널 또는 그래픽 사용자 인터페이스에 의해 소비되는 모든 키 누름을 얻을 수있는 경우 원시 모드로 터미널을 넣어 termios의 인터페이스 (또는 스크립트에서 동등하게 stty 명령)를 사용하는 (열쇠이다 전환 터미널 같은 물건을 위해 예약 된 조합, 창을 닫는 것 등).

가장 일반적인 방법은 Curses이라는 매우 일반적인 라이브러리를 사용하는 것입니다. 가장 일반적인 구현 (평범한 Curses에 비해 약간의 추가 장점이 있음)은 ncurses입니다. 소스를 다운로드하고 컴파일하려면 해당 링크로 이동할 필요가 없습니다. 라이브러리는 이미 배포 용으로 패키지되어 있으므로 표준 소프트웨어 리포지토리에서 찾을 수 있습니다. Windows의 경우 PDCurses입니다. MinGW 컴파일러를 사용하면 Windows에서도 ncurses를 사용할 수 있습니다.

다양한 버전의 라이브러리에 속지 마십시오 (활용할 수 있다면 ncurses 6을 권장합니다). curses 인터페이스는 안정적이며 매우 오랜 시간 동안 사용되었습니다. Ncurses는 유용한 것들을 추가하고, 여전히 능동적으로 관리됩니다.

관련 문제