2010-11-17 3 views
6

в порядке, поэтому я использую sighandler для интерпретации некоторого сигнала, для этой цели это ctrl-c, поэтому, когда набирается ctrl-c, будет предпринято какое-то действие, и все в порядке и денди, но то, что мне действительно нужно, чтобы это произошло без^с появлением в вводе/выводеиспользуя sigint из ctrl-c

, например, скажем, у меня есть этот код

#include <stdio.h> 
#include <stdlib.h> 
#include <signal.h> 

void siginthandler(int param) 
{ 
    printf("User pressed Ctrl+C\n"); 
    exit(1); 
} 

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

выход будет

^CUser нажал Ctrl + C

как я могу получить это просто быть

Пользователь нажал Ctrl + C?

+0

Обратите внимание, что^C фактически не находится на выходе. Перенесите вывод своей программы в файл с '> output' и обратите внимание, что^C все еще отображается в окне терминала, но не отображается в выходном файле. – Kamal

+0

Большое спасибо за помощь, очень хорошие предложения! теперь я считаю себя лучшим программистом :) –

ответ

1

Это, скорее всего, не ваша программа. Скорее всего, это драйверы терминалов, и в этом случае вы должны заглянуть в stty с параметрами ctlecho или echoctl.

Вы можете использовать stty -a, чтобы получить все текущие настройки для вашего оконечного устройства. Для программного интерфейса к этим предметам, termios - это путь.

+0

в порядке, это имеет смысл, спасибо. как бы это реализовать в моем коде? это команда C, исследование на ней мало разрешено ... –

3

Вы можете добиться этого эффекта с помощью библиотеки проклятий в «NoEcho()» вызов - но вы должны быть готовы принять (и/или использование) проклинает терминальную обработку тоже ...

#include <stdio.h> 
#include <stdlib.h> 
#include <signal.h> 

#include <curses.h> 

void siginthandler(int param) 
{ 
    endwin(); 
    printf("User pressed Ctrl+C\n"); 
    exit(1); 
} 

int main() 
{ 
    initscr(); 
     noecho(); 
    signal(SIGINT, siginthandler); 
    while(1); 
    return 0; 
} 
+0

При ближайшем рассмотрении -^C не появляется даже без вызова noecho(). Perhpas curses initscr() устанавливает это поведение по умолчанию. – Kamal

0

В других сказали, что такая вещь попадает под контроль вашего драйвера терминала и обычно делается с использованием библиотеки curses. Тем не менее, вот хак, который, вероятно, доставит вас в пути:

#include <stdio.h> 
#include <stdlib.h> 
#include <signal.h> 

void siginthandler(int param) { 
    printf("User pressed Ctrl+C\n"); 
    system("stty echo"); 
    exit(1); 
} 

int main() { 
    system("stty -echo"); 
    signal(SIGINT, siginthandler); 
    while(1); 
    return 0; 
}