문제
나는 껍질을 쓰려고 노력하고 있으며 무시하고 싶은 시점에 있습니다. Ctrl 키씨.
현재 신호가 올 때 Sigint를 무시하고 새 라인을 인쇄하는 프로그램이 있지만 어떻게 방지 할 수 있습니까? ^C
인쇄에서?
누를 때 Ctrl 키씨, 여기에 내가 얻는 것이 있습니다.
myshell>^C
myshell>^C
myshell>^C
하지만 나는 원한다:
myshell>
myshell>
myshell>
여기 내 코드가 관련이 있습니다 Ctrl 키씨:
extern "C" void disp( int sig )
{
printf("\n");
}
main()
{
sigset( SIGINT, disp );
while(1)
{
Command::_currentCommand.prompt();
yyparse();
}
}
해결책
그 일을 반향하는 것은 터미널입니다. 당신은 그것을 멈추라 고 말해야합니다. 내 인력 stty
말한다
* [-]ctlecho
echo control characters in hat notation (`^c')
달리기 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
따라서 올바른 매개 변수로 IOCTL을 실행하면 컨트롤 Echo OFF를 전환 할 수 있습니다. 들여다보다 man termios
편리한 인터페이스를 위해. 사용하기 쉽습니다
#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();
}
또는 사용을 고려할 수 있습니다 GNU readline
입력 라인을 읽습니다. 내가 아는 한, 터미널이 그런 종류의 일을하는 옵션이 있습니다.
다른 팁
백 스페이스 캐릭터를 인쇄 해보세요 (일명 B?
제휴하지 않습니다 StackOverflow