«Ловушка» контроль-д и контроль-с - PullRequest
0 голосов
/ 01 ноября 2009

У меня есть консольная программа, и я хочу, чтобы, если пользователь нажал ctrl-z, программа вышла, а если он нажал ctrl-c, ничего не произошло. В Bash я бы поставил ловушку, что я должен использовать в C ++?

Ответы [ 4 ]

5 голосов
/ 01 ноября 2009

В Unix используйте signal() в <signal.h> для регистрации функции, вызываемой при получении сигнала.

Например:

#include <signal.h>

void leave(int sig);

// ...
{
    signal(SIGINT,leave);
    for(;;) getchar();
}

// Beware:  calling library fn from signal handler isn't std-conforming
//          and may not work.
void leave(int sig)
{
    exit(sig);
}
4 голосов
/ 01 ноября 2009

Если вы используете систему на основе UNIX, то вы хотите либо signal(), либо sigaction() в зависимости от ваших предпочтений и модели потоков; лично я бы порекомендовал sigaction() более signal(). Вы хотите поймать в ловушку SIGTSTP и SIGINT. Прочитайте раздел Signal Concepts Одиночной спецификации UNIX для подробного описания того, как их использовать.

Если у вас есть свободное время, прочитайте классическое Расширенное программирование У. Ричарда Стивена в среде UNIX . Вы никогда не пожалеете. Если вы собираетесь выполнять больше задач по программированию в системе UNIX, возьмите также копии Руководства для программистов POSIX и Руководства для программистов POSIX.4 . Они служат отличными введениями и ссылками.

2 голосов
/ 01 ноября 2009

Для Ctrl + C вы должны поймать сигнал SIGINT. Смотри здесь.

1 голос
/ 01 ноября 2009

Конечно, это зависит от платформы. Сам C ++ не знает о вводе с клавиатуры или обработке сигналов.

Как вы упомянули bash, я полагаю, что вы работаете в Linux или в какой-то степени UN * X. В этом случае взгляните на signal.h .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...