2009-03-04 10 views
2

쉘을 쓰려고하는데, 무시하고 싶은 부분에 있습니다. CtrlC.ctrl-c를 무시합니다.

현재 신호가 오면 내 프로그램에서 SIGINT를 무시하고 새 줄을 인쇄하지만, ^C이 인쇄되지 않도록하려면 어떻게해야합니까?

Ctrl 키C을 누르면 여기에 내가 무엇을 얻을 수 있습니다 :

myshell>^C 
myshell>^C 
myshell>^C 

하지만 내가 원하는 : 여기

myshell> 
myshell> 
myshell> 

Ctrl 키 C 관련이 내 코드입니다 :

extern "C" void disp(int sig) 
{ 
    printf("\n"); 
} 

main() 
{ 
    sigset(SIGINT, disp); 
    while(1) 
    { 
     Command::_currentCommand.prompt(); 
     yyparse(); 
    } 
} 
+0

아마도이 태그를 플랫폼에 추가하고 싶을 것입니다 ... – dmckee

답변

10

그 것을 울리는 말단입니다. 그 일을 그만두라고 말해야합니다. stty 내 맨 페이지

* [-]ctlecho 
     echo control characters in hat notation (`^c') 

그래서 반향을 해당 컨트롤을 전환 할 수있는 권리 매개 변수의 ioctl을 실행 strace stty ctlecho

ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 
ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0 
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 

를 실행했다. 그 (것)들에 편리한 공용 영역을위한 man termios로보십시오. 그것은 당신이 입력 한 줄을 읽어 GNU readline 사용을 고려할 수

#include <termios.h> 
#include <unistd.h> 
#include <stdio.h> 

void setup_term(void) { 
    struct termios t; 
    tcgetattr(0, &t); 
    t.c_lflag &= ~ECHOCTL; 
    tcsetattr(0, TCSANOW, &t); 
} 

int main() { 
    setup_term(); 
    getchar(); 
} 

또는 그 (것)들에게 사용하기 쉽습니다. 내가 아는 한, 터미널에 그 종류의 일을하는 것을 막을 수있는 옵션이있다.

0

백 스페이스 문자, 일명 \ b를 인쇄 해보십시오.